diff --git a/VirtualListView/Apple/CvCell.ios.maccatalyst.cs b/VirtualListView/Apple/CvCell.ios.maccatalyst.cs index 517b642..ce8b4fa 100644 --- a/VirtualListView/Apple/CvCell.ios.maccatalyst.cs +++ b/VirtualListView/Apple/CvCell.ios.maccatalyst.cs @@ -1,8 +1,6 @@ using CoreGraphics; using Foundation; using Microsoft.Maui.Platform; -using Microsoft.VisualBasic; -using System.Diagnostics.CodeAnalysis; using UIKit; namespace Microsoft.Maui; diff --git a/VirtualListView/Apple/CvDataSource.ios.maccatalyst.cs b/VirtualListView/Apple/CvDataSource.ios.maccatalyst.cs index 2d2dd99..015893b 100644 --- a/VirtualListView/Apple/CvDataSource.ios.maccatalyst.cs +++ b/VirtualListView/Apple/CvDataSource.ios.maccatalyst.cs @@ -70,23 +70,19 @@ public override UICollectionViewCell GetCell(UICollectionView collectionView, NS info.IsSelected = false; else info.IsSelected = Handler?.IsItemSelected(info.SectionIndex, info.ItemIndex) ?? false; - } - - if (cell.NeedsView && info is not null && data is not null) - { - var view = Handler?.PositionalViewSelector?.ViewSelector?.CreateView(info, data); - if (view is not null) - cell.SetupView(view); - } + + if (cell.NeedsView) + { + var view = Handler?.PositionalViewSelector?.ViewSelector?.CreateView(info, data); + if (view is not null) + cell.SetupView(view); + } - if (info is not null) - { cell.UpdatePosition(info); - if (data is not null && (cell.VirtualView?.TryGetTarget(out var cellVirtualView) ?? false)) + if (cell.VirtualView?.TryGetTarget(out var cellVirtualView) ?? false) { Handler?.PositionalViewSelector?.ViewSelector?.RecycleView(info, data, cellVirtualView); - Handler?.VirtualView?.ViewSelector?.ViewAttached(info, cellVirtualView); } } diff --git a/VirtualListView/Controls/VirtualListView.cs b/VirtualListView/Controls/VirtualListView.cs index a6d0d73..35e917c 100644 --- a/VirtualListView/Controls/VirtualListView.cs +++ b/VirtualListView/Controls/VirtualListView.cs @@ -1,4 +1,5 @@ -using System.Windows.Input; +#nullable enable +using System.Windows.Input; using Microsoft.Maui.Adapters; namespace Microsoft.Maui.Controls; @@ -21,7 +22,7 @@ public IVirtualListViewAdapter Adapter BindableProperty.Create(nameof(Adapter), typeof(IVirtualListViewAdapter), typeof(VirtualListView), default); - public IView GlobalHeader + public IView? GlobalHeader { get => (IView)GetValue(GlobalHeaderProperty); set => SetValue(GlobalHeaderProperty, value); @@ -39,7 +40,7 @@ public bool IsHeaderVisible public static readonly BindableProperty IsHeaderVisibleProperty = BindableProperty.Create(nameof(IsHeaderVisible), typeof(bool), typeof(VirtualListView), true); - public IView GlobalFooter + public IView? GlobalFooter { get => (IView)GetValue(GlobalFooterProperty); set => SetValue(GlobalFooterProperty, value); @@ -59,7 +60,7 @@ public bool IsFooterVisible BindableProperty.Create(nameof(IsFooterVisible), typeof(bool), typeof(VirtualListView), true); - public DataTemplate ItemTemplate + public DataTemplate? ItemTemplate { get => (DataTemplate)GetValue(ItemTemplateProperty); set => SetValue(ItemTemplateProperty, value); @@ -68,7 +69,7 @@ public DataTemplate ItemTemplate public static readonly BindableProperty ItemTemplateProperty = BindableProperty.Create(nameof(ItemTemplate), typeof(DataTemplate), typeof(VirtualListView), default); - public VirtualListViewItemTemplateSelector ItemTemplateSelector + public VirtualListViewItemTemplateSelector? ItemTemplateSelector { get => (VirtualListViewItemTemplateSelector)GetValue(ItemTemplateSelectorProperty); set => SetValue(ItemTemplateSelectorProperty, value); @@ -97,7 +98,7 @@ public ScrollBarVisibility HorizontalScrollbarVisibility public static readonly BindableProperty HorizontalScrollbarVisibilityProperty = BindableProperty.Create(nameof(HorizontalScrollbarVisibility), typeof(ScrollBarVisibility), typeof(VirtualListView), ScrollBarVisibility.Default); - public DataTemplate SectionHeaderTemplate + public DataTemplate? SectionHeaderTemplate { get => (DataTemplate)GetValue(SectionHeaderTemplateProperty); set => SetValue(SectionHeaderTemplateProperty, value); @@ -106,7 +107,7 @@ public DataTemplate SectionHeaderTemplate public static readonly BindableProperty SectionHeaderTemplateProperty = BindableProperty.Create(nameof(SectionHeaderTemplate), typeof(DataTemplate), typeof(VirtualListView), default); - public VirtualListViewSectionTemplateSelector SectionHeaderTemplateSelector + public VirtualListViewSectionTemplateSelector? SectionHeaderTemplateSelector { get => (VirtualListViewSectionTemplateSelector)GetValue(SectionHeaderTemplateSelectorProperty); set => SetValue(SectionHeaderTemplateSelectorProperty, value); @@ -117,7 +118,7 @@ public VirtualListViewSectionTemplateSelector SectionHeaderTemplateSelector - public DataTemplate SectionFooterTemplate + public DataTemplate? SectionFooterTemplate { get => (DataTemplate)GetValue(SectionFooterTemplateProperty); set => SetValue(SectionFooterTemplateProperty, value); @@ -126,7 +127,7 @@ public DataTemplate SectionFooterTemplate public static readonly BindableProperty SectionFooterTemplateProperty = BindableProperty.Create(nameof(SectionFooterTemplate), typeof(DataTemplate), typeof(VirtualListView), default); - public VirtualListViewSectionTemplateSelector SectionFooterTemplateSelector + public VirtualListViewSectionTemplateSelector? SectionFooterTemplateSelector { get => (VirtualListViewSectionTemplateSelector)GetValue(SectionFooterTemplateSelectorProperty); set => SetValue(SectionFooterTemplateSelectorProperty, value); @@ -159,7 +160,7 @@ void IVirtualListView.Refresh(Action completionCallback) OnRefresh?.Invoke(this, new RefreshEventArgs(completionCallback)); } - public ICommand RefreshCommand + public ICommand? RefreshCommand { get => (ICommand)GetValue(RefreshCommandProperty); set => SetValue(RefreshCommandProperty, value); @@ -168,9 +169,9 @@ public ICommand RefreshCommand public static readonly BindableProperty RefreshCommandProperty = BindableProperty.Create(nameof(RefreshCommand), typeof(ICommand), typeof(VirtualListView), default); - public Color RefreshAccentColor + public Color? RefreshAccentColor { - get => (Color)GetValue(RefreshAccentColorProperty); + get => (Color?)GetValue(RefreshAccentColorProperty); set => SetValue(RefreshAccentColorProperty, value); } @@ -196,14 +197,14 @@ public ListOrientation Orientation BindableProperty.Create(nameof(Orientation), typeof(ListOrientation), typeof(VirtualListView), ListOrientation.Vertical); - public View EmptyView + public IView? EmptyView { - get => (View)GetValue(EmptyViewProperty); + get => (IView)GetValue(EmptyViewProperty); set => SetValue(EmptyViewProperty, value); } public static readonly BindableProperty EmptyViewProperty = - BindableProperty.Create(nameof(EmptyView), typeof(View), typeof(VirtualListView), null, + BindableProperty.Create(nameof(EmptyView), typeof(IView), typeof(VirtualListView), null, propertyChanged: (bobj, oldValue, newValue) => { if (bobj is VirtualListView virtualListView) @@ -216,13 +217,13 @@ public View EmptyView } }); - IView IVirtualListView.EmptyView => EmptyView; + IView? IVirtualListView.EmptyView => EmptyView; public IVirtualListViewSelector ViewSelector => this; - public IView Header => GlobalHeader; - public IView Footer => GlobalFooter; + public IView? Header => GlobalHeader; + public IView? Footer => GlobalFooter; public event EventHandler OnScrolled; @@ -239,7 +240,7 @@ public void Scrolled(double x, double y) public static readonly BindableProperty ScrolledCommandProperty = BindableProperty.Create(nameof(ScrolledCommand), typeof(ICommand), typeof(VirtualListView), default); - public ICommand ScrolledCommand + public ICommand? ScrolledCommand { get => (ICommand)GetValue(ScrolledCommandProperty); set => SetValue(ScrolledCommandProperty, value); @@ -256,7 +257,7 @@ public ICommand ScrolledCommand vlv.RaiseSelectedItemsChanged(oldSelection.ToArray(), newSelection.ToArray()); } }); - public IList SelectedItems + public IList? SelectedItems { get => (IList)GetValue(SelectedItemsProperty); set => SetValue(SelectedItemsProperty, value ?? Array.Empty()); @@ -314,9 +315,9 @@ public void SelectItem(ItemPosition itemPosition) else if (SelectionMode == Maui.SelectionMode.Multiple) { var current = SelectedItems; - if (!current.Contains(itemPosition)) + if (current is null || !current.Contains(itemPosition)) { - SelectedItems = current.Append(itemPosition).ToArray(); + SelectedItems = (current ?? []).Append(itemPosition).ToArray(); } } } @@ -338,7 +339,7 @@ public bool SectionHasHeader(int sectionIndex) public bool SectionHasFooter(int sectionIndex) => SectionFooterTemplateSelector != null || SectionFooterTemplate != null; - public IView CreateView(PositionInfo position, object data) + public IView? CreateView(PositionInfo position, object? data) => position.Kind switch { PositionKind.Item => @@ -357,7 +358,7 @@ public IView CreateView(PositionInfo position, object data) _ => default }; - public void RecycleView(PositionInfo position, object data, IView view) + public void RecycleView(PositionInfo position, object? data, IView view) { if (view is View controlsView) { @@ -370,7 +371,7 @@ public void RecycleView(PositionInfo position, object data, IView view) } } - public string GetReuseId(PositionInfo position, object data) + public string GetReuseId(PositionInfo position, object? data) => position.Kind switch { PositionKind.Item => diff --git a/VirtualListView/Controls/VirtualListViewItemTemplateSelector.cs b/VirtualListView/Controls/VirtualListViewItemTemplateSelector.cs index f2c93e6..72e4780 100644 --- a/VirtualListView/Controls/VirtualListViewItemTemplateSelector.cs +++ b/VirtualListView/Controls/VirtualListViewItemTemplateSelector.cs @@ -1,11 +1,13 @@ -namespace Microsoft.Maui.Controls; +#nullable enable + +namespace Microsoft.Maui.Controls; public abstract class VirtualListViewItemTemplateSelector { - public abstract DataTemplate SelectTemplate(object item, int sectionIndex, int itemIndex); + public abstract DataTemplate SelectTemplate(object? item, int sectionIndex, int itemIndex); } public abstract class VirtualListViewSectionTemplateSelector { - public abstract DataTemplate SelectTemplate(object section, int sectionIndex); + public abstract DataTemplate SelectTemplate(object? section, int sectionIndex); } diff --git a/VirtualListView/IVirtualListViewSelector.cs b/VirtualListView/IVirtualListViewSelector.cs index e848eee..824eba6 100644 --- a/VirtualListView/IVirtualListViewSelector.cs +++ b/VirtualListView/IVirtualListViewSelector.cs @@ -1,13 +1,14 @@ -namespace Microsoft.Maui; +#nullable enable +namespace Microsoft.Maui; public interface IVirtualListViewSelector { bool SectionHasHeader(int sectionIndex); bool SectionHasFooter(int sectionIndex); - IView CreateView(PositionInfo position, object data); - void RecycleView(PositionInfo position, object data, IView view); - string GetReuseId(PositionInfo position, object data); + IView? CreateView(PositionInfo position, object? data); + void RecycleView(PositionInfo position, object? data, IView view); + string GetReuseId(PositionInfo position, object? data); void ViewDetached(PositionInfo position, IView view) { } diff --git a/VirtualListView/VirtualListViewExtensions.cs b/VirtualListView/VirtualListViewExtensions.cs index 4142306..951e1e6 100644 --- a/VirtualListView/VirtualListViewExtensions.cs +++ b/VirtualListView/VirtualListViewExtensions.cs @@ -1,10 +1,11 @@ -using Microsoft.Maui.Adapters; +#nullable enable +using Microsoft.Maui.Adapters; namespace Microsoft.Maui; internal static class VirtualListViewExtensions { - public static object DataFor(this IVirtualListViewAdapter vlva, PositionKind kind, int sectionIndex, int itemIndex) + public static object? DataFor(this IVirtualListViewAdapter vlva, PositionKind kind, int sectionIndex, int itemIndex) => kind switch { PositionKind.Item => vlva.GetItem(sectionIndex, itemIndex),