MultiSelectPage.xaml.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. using comal.timesheets.Data_Classes;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Collections.ObjectModel;
  5. using System.ComponentModel;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using Xamarin.Forms;
  10. using Xamarin.Forms.Xaml;
  11. namespace comal.timesheets
  12. {
  13. public delegate void MultiSelctPageSaved(IEnumerable<MultiSelectPageViewItem> items, int colnumber, string columnname);
  14. [XamlCompilation(XamlCompilationOptions.Compile)]
  15. public partial class MultiSelectPage : ContentPage
  16. {
  17. public event MultiSelctPageSaved OnPageSaved;
  18. List<string> Options = new List<string>();
  19. int Columnnumber;
  20. string ColumnName;
  21. ObservableCollection<MultiSelectPageViewItem> Items = new ObservableCollection<MultiSelectPageViewItem>();
  22. public MultiSelectPage(List<string> options, string title = "Select Options")
  23. {
  24. Setup(options, title);
  25. listView.ItemsSource = Items;
  26. }
  27. public MultiSelectPage(List<string> options, List<DataGridFilter> filters, int columnnumber, string columnname)
  28. {
  29. Setup(options, columnname);
  30. foreach (var filter in filters)
  31. {
  32. var item = Items.FirstOrDefault(x => x.Value == filter.Value);
  33. item.Selected = true;
  34. }
  35. ColumnName = columnname;
  36. Columnnumber = columnnumber;
  37. listView.ItemsSource = Items;
  38. }
  39. private void Setup(List<string> options, string title)
  40. {
  41. InitializeComponent();
  42. titleLbl.Text = title;
  43. NavigationPage.SetHasBackButton(this, false);
  44. Options = options;
  45. foreach (var option in Options)
  46. Items.Add(new MultiSelectPageViewItem { Value = option });
  47. }
  48. private void SearchEnt_Changed(object sender, EventArgs e)
  49. {
  50. string s = searchEnt.Text;
  51. listView.ItemsSource = Items.Where(
  52. x => x.Value.Contains(s) || x.Value.Contains(s.ToUpper()) || x.Value.Contains(s.ToLower())
  53. || x.Value.Contains(SearchUtils.UpperCaseFirst(s)) || x.Value.Contains(SearchUtils.LowerCaseFirst(s)) || x.Value.Contains(SearchUtils.UpperCaseSecond(s))
  54. );
  55. }
  56. private void CancelBtn_Clicked(object sender, EventArgs e)
  57. {
  58. Navigation.PopAsync();
  59. }
  60. private void SaveBtn_Clicked(object sender, EventArgs e)
  61. {
  62. OnPageSaved(Items.Where(x => x.Selected == true), Columnnumber, ColumnName) ;
  63. Navigation.PopAsync();
  64. }
  65. private void Item_Tapped(object sender, EventArgs e)
  66. {
  67. var selecteditem = listView.SelectedItem as MultiSelectPageViewItem;
  68. var item = Items.FirstOrDefault(x => x.Value == selecteditem.Value);
  69. item.Selected = item.Selected == true ? false : true;
  70. }
  71. private void SelectAll_Clicked(object sender, EventArgs e)
  72. {
  73. foreach (var item in Items)
  74. item.Selected = true;
  75. }
  76. private void ClearAll_Clicked(object sender, EventArgs e)
  77. {
  78. foreach (var item in Items)
  79. item.Selected = false;
  80. }
  81. }
  82. public class MultiSelectPageViewItem : INotifyPropertyChanged
  83. {
  84. public event PropertyChangedEventHandler PropertyChanged;
  85. private bool selected;
  86. public string Value { get; set; }
  87. public bool Selected
  88. {
  89. get => selected;
  90. set
  91. {
  92. selected = value;
  93. OnPropertyChanged("Selected");
  94. }
  95. }
  96. public MultiSelectPageViewItem()
  97. {
  98. Value = "";
  99. Selected = false;
  100. }
  101. protected virtual void OnPropertyChanged(string propertyName)
  102. {
  103. PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
  104. }
  105. }
  106. }