123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- 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;
- }
- }
-
- }
- }
|