using System; using System.Collections; using System.Collections.Specialized; using System.Linq; using System.Windows.Input; using Xamarin.Forms; using Xamarin.Forms.Xaml; using XF.Material.Forms.UI.Dialogs; namespace InABox.Mobile { public class MobileListRefreshEventArgs : EventArgs { } public delegate void MobileListRefreshEvent(object sender, MobileListRefreshEventArgs args); [XamlCompilation(XamlCompilationOptions.Compile)] public partial class MobileList { public bool PullToRefresh { get => _refresher.IsEnabled == true; set => _refresher.IsEnabled = value; } // public int RowHeight // { // get => _viewmodel.RowHeight; // set => _viewmodel.RowHeight = value; // } public DataTemplate ItemTemplate { get => _list.ItemTemplate; set => _list.ItemTemplate = value; } public IEnumerable ItemsSource { get => _list.ItemsSource; set { if (_list.ItemsSource is INotifyCollectionChanged old) old.CollectionChanged -= ItemsSourceChanged; _list.ItemsSource = value; CheckChanged(); if (value is INotifyCollectionChanged observable) observable.CollectionChanged += ItemsSourceChanged; } } private void ItemsSourceChanged(object sender, NotifyCollectionChangedEventArgs e) { CheckChanged(); } private void CheckChanged() { _list.IsVisible = ItemsSource?.GetEnumerator().MoveNext() == true; _nodata.IsVisible = !_list.IsVisible; } private double _spacing; public double Spacing { get => _spacing; set { _spacing = value; var layout = _list?.ItemsLayout as LinearItemsLayout; if (layout != null) layout.ItemSpacing = _spacing; } } private bool _unevenrows; public bool HasUnevenRows { get => _unevenrows; set { _unevenrows = value; if (_list != null) _list.ItemSizingStrategy = value ? ItemSizingStrategy.MeasureAllItems : ItemSizingStrategy.MeasureFirstItem; } } public event MobileListRefreshEvent RefreshRequested; public MobileList() { InitializeComponent(); _refresher.Command = new Command(DoRefresh); Spacing = 5; HasUnevenRows = true; } private void DoRefresh(object sender) { if (_refresher != null) { //var src = _list.ItemsSource; //_list.ItemsSource = null; _refresher.IsRefreshing = true; RefreshRequested?.Invoke(sender, new MobileListRefreshEventArgs()); _refresher.IsRefreshing = false; //_list.ItemsSource = src; } } } }