SelectionView.xaml.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. using System;
  2. using Xamarin.Forms.Xaml;
  3. namespace PRS.Mobile
  4. {
  5. public class SelectionViewConfigureArgs : EventArgs
  6. {
  7. public MobileGridColumns Columns { get; private set; }
  8. public SelectionViewConfigureArgs(MobileGridColumns columns)
  9. {
  10. Columns = columns;
  11. }
  12. }
  13. public delegate void SelectionViewConfigureEvent(object sender, SelectionViewConfigureArgs args);
  14. public class SelectionViewRefreshArgs : EventArgs
  15. {
  16. public bool Force { get; private set; }
  17. public SelectionViewRefreshArgs(bool force)
  18. {
  19. Force = force;
  20. }
  21. }
  22. public delegate object SelectionViewRefreshEvent(object sender, SelectionViewRefreshArgs args);
  23. public class SelectionViewSelectionChangedArgs : EventArgs
  24. {
  25. public object[] SelectedItems { get; private set; }
  26. public SelectionViewSelectionChangedArgs(object[] selecteditems)
  27. {
  28. SelectedItems = selecteditems;
  29. }
  30. }
  31. public delegate void SelectionViewSelectionChangedEvent(object sender, SelectionViewSelectionChangedArgs args);
  32. [XamlCompilation(XamlCompilationOptions.Compile)]
  33. public partial class SelectionView
  34. {
  35. private SelectionPageMode _mode = SelectionPageMode.Immediate;
  36. public SelectionPageMode Mode
  37. {
  38. get => _mode;
  39. set
  40. {
  41. _mode = value;
  42. Items.SelectionMode = value == SelectionPageMode.MultiSelect
  43. ? MobileGridSelectionMode.Multiple
  44. : MobileGridSelectionMode.Single;
  45. }
  46. }
  47. public object[] SelectedItems => Items.SelectedItems;
  48. public event SelectionViewConfigureEvent Configure;
  49. public event SelectionViewRefreshEvent Refresh;
  50. public event SelectionViewSelectionChangedEvent SelectionChanged;
  51. public bool CanSearch
  52. {
  53. get => Items.CanSearch;
  54. set => Items.CanSearch = value;
  55. }
  56. public SelectionView()
  57. {
  58. Mode = SelectionPageMode.Immediate;
  59. InitializeComponent();
  60. }
  61. public void Load()
  62. {
  63. Configure?.Invoke(this, new SelectionViewConfigureArgs(Items.Columns));
  64. Items.SelectionMode = Mode == SelectionPageMode.MultiSelect
  65. ? MobileGridSelectionMode.Multiple
  66. : MobileGridSelectionMode.Single;
  67. Items.PullToRefresh = true;
  68. Items.ItemsSource = Refresh?.Invoke(this, new SelectionViewRefreshArgs(false));
  69. }
  70. private void Items_OnRefreshRequested(object sender, MobileGridRefreshRequestArgs args)
  71. {
  72. var items = Refresh?.Invoke(this, new SelectionViewRefreshArgs(true));
  73. Items.ItemsSource = items;
  74. }
  75. private void Items_OnSelectionChanged(object sender, MobileGridSelectionArgs args)
  76. {
  77. if (Mode == SelectionPageMode.Immediate)
  78. SelectionChanged?.Invoke(this, new SelectionViewSelectionChangedArgs(Items.SelectedItems));
  79. }
  80. }
  81. }