MobileList.xaml.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. using System;
  2. using System.Collections;
  3. using System.Linq;
  4. using System.Windows.Input;
  5. using Xamarin.Forms;
  6. using Xamarin.Forms.Xaml;
  7. using XF.Material.Forms.UI.Dialogs;
  8. namespace InABox.Mobile
  9. {
  10. public class MobileListRefreshEventArgs : EventArgs
  11. {
  12. }
  13. public delegate void MobileListRefreshEvent(object sender, MobileListRefreshEventArgs args);
  14. [XamlCompilation(XamlCompilationOptions.Compile)]
  15. public partial class MobileList
  16. {
  17. public bool PullToRefresh
  18. {
  19. get => _refresher.IsEnabled == true;
  20. set => _refresher.IsEnabled = value;
  21. }
  22. // public int RowHeight
  23. // {
  24. // get => _viewmodel.RowHeight;
  25. // set => _viewmodel.RowHeight = value;
  26. // }
  27. public DataTemplate ItemTemplate
  28. {
  29. get => _list.ItemTemplate;
  30. set => _list.ItemTemplate = value;
  31. }
  32. public IEnumerable ItemsSource
  33. {
  34. get => _list.ItemsSource;
  35. set => _list.ItemsSource = value;
  36. }
  37. private double _spacing;
  38. public double Spacing
  39. {
  40. get => _spacing;
  41. set
  42. {
  43. _spacing = value;
  44. var layout = _list?.ItemsLayout as LinearItemsLayout;
  45. if (layout != null)
  46. layout.ItemSpacing = _spacing;
  47. }
  48. }
  49. private bool _unevenrows;
  50. public bool HasUnevenRows
  51. {
  52. get => _unevenrows;
  53. set
  54. {
  55. _unevenrows = value;
  56. if (_list != null)
  57. _list.ItemSizingStrategy =
  58. value
  59. ? ItemSizingStrategy.MeasureAllItems
  60. : ItemSizingStrategy.MeasureFirstItem;
  61. }
  62. }
  63. public event MobileListRefreshEvent RefreshRequested;
  64. public MobileList()
  65. {
  66. InitializeComponent();
  67. _refresher.Command = new Command(DoRefresh);
  68. Spacing = 5;
  69. HasUnevenRows = false;
  70. }
  71. private void DoRefresh(object sender)
  72. {
  73. if (_refresher != null)
  74. {
  75. //var src = _list.ItemsSource;
  76. //_list.ItemsSource = null;
  77. _refresher.IsRefreshing = true;
  78. RefreshRequested?.Invoke(sender, new MobileListRefreshEventArgs());
  79. _refresher.IsRefreshing = false;
  80. //_list.ItemsSource = src;
  81. }
  82. }
  83. }
  84. }