MobileList.xaml.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. using System;
  2. using System.Linq;
  3. using System.Windows.Input;
  4. using Xamarin.Forms;
  5. using Xamarin.Forms.Xaml;
  6. using XF.Material.Forms.UI.Dialogs;
  7. namespace comal.timesheets
  8. {
  9. public class MobileListRefreshEventArgs : EventArgs
  10. {
  11. }
  12. public delegate void MobileListRefreshEvent(object sender, MobileListRefreshEventArgs args);
  13. public class MobileListItemTappedEventArgs : EventArgs
  14. {
  15. }
  16. public delegate void MobileListItemTappedEvent(object sender, MobileListItemTappedEventArgs args);
  17. public class MobileListViewModel : BindableObject
  18. {
  19. public int RowHeight { get; set; }
  20. public DataTemplate ItemTemplate { get; set; }
  21. public object ItemsSource { get; set; }
  22. public bool PullToRefresh
  23. {
  24. get;
  25. set;
  26. }
  27. public event MobileListRefreshEvent Refresh;
  28. public ICommand RefreshCommand => new Command(DoRefresh, CanRefresh);
  29. private bool CanRefresh(object sender) => PullToRefresh;
  30. private void DoRefresh(object sender)
  31. {
  32. IsRefreshing = true;
  33. Refresh?.Invoke(sender, new MobileListRefreshEventArgs());
  34. IsRefreshing = false;
  35. }
  36. public bool IsRefreshing { get; private set; }
  37. }
  38. // public class MobileListDataTemplateSelector : DataTemplateSelector
  39. // {
  40. //
  41. // protected override DataTemplate OnSelectTemplate(object item, BindableObject container) => new DataTemplate(typeof(DeliveryListEntry));
  42. // }
  43. [XamlCompilation(XamlCompilationOptions.Compile)]
  44. public partial class MobileList
  45. {
  46. public bool PullToRefresh
  47. {
  48. get => _viewmodel.PullToRefresh;
  49. set => _viewmodel.PullToRefresh = value;
  50. }
  51. public int RowHeight
  52. {
  53. get => _viewmodel.RowHeight;
  54. set => _viewmodel.RowHeight = value;
  55. }
  56. public DataTemplate ItemTemplate
  57. {
  58. get => _viewmodel.ItemTemplate;
  59. set => _viewmodel.ItemTemplate = value;
  60. }
  61. public object ItemsSource
  62. {
  63. get => _viewmodel.ItemsSource;
  64. set => _viewmodel.ItemsSource = value;
  65. }
  66. public event MobileListRefreshEvent Refresh;
  67. public event MobileListItemTappedEvent ItemTapped;
  68. public MobileList()
  69. {
  70. InitializeComponent();
  71. _viewmodel.Refresh += DoRefresh;
  72. }
  73. private async void DoRefresh(object sender, MobileListRefreshEventArgs args)
  74. {
  75. Refresh?.Invoke(this, new MobileListRefreshEventArgs());
  76. }
  77. private void Cell_OnTapped(object sender, EventArgs e)
  78. {
  79. //if (sender is ViewCell viewcell)
  80. // ItemTapped?.Invoke(viewcell.BindingContext, new MobileListItemTappedEventArgs());
  81. }
  82. private void _list_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
  83. {
  84. if (e.CurrentSelection.Any())
  85. ItemTapped?.Invoke(e.CurrentSelection.First(), new MobileListItemTappedEventArgs());
  86. }
  87. }
  88. }