using comal.timesheets.Data_Classes; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; using Xamarin.Forms; using Xamarin.Forms.Xaml; namespace comal.timesheets { public delegate void MultiSelctPageSaved(IEnumerable items, int colnumber, string columnname); [XamlCompilation(XamlCompilationOptions.Compile)] public partial class MultiSelectPage : ContentPage { public event MultiSelctPageSaved OnPageSaved; List Options = new List(); int Columnnumber; string ColumnName; ObservableCollection Items = new ObservableCollection(); public MultiSelectPage(List options, string title = "Select Options") { Setup(options, title); listView.ItemsSource = Items; } public MultiSelectPage(List options, List filters, int columnnumber, string columnname) { Setup(options, columnname); foreach (var filter in filters) { var item = Items.FirstOrDefault(x => x.Value == filter.Value); item.Selected = true; } ColumnName = columnname; Columnnumber = columnnumber; listView.ItemsSource = Items; } private void Setup(List options, string title) { InitializeComponent(); titleLbl.Text = title; NavigationPage.SetHasBackButton(this, false); Options = options; foreach (var option in Options) Items.Add(new MultiSelectPageViewItem { Value = option }); } private void SearchEnt_Changed(object sender, EventArgs e) { string s = searchEnt.Text; listView.ItemsSource = Items.Where( x => x.Value.Contains(s) || x.Value.Contains(s.ToUpper()) || x.Value.Contains(s.ToLower()) || x.Value.Contains(SearchUtils.UpperCaseFirst(s)) || x.Value.Contains(SearchUtils.LowerCaseFirst(s)) || x.Value.Contains(SearchUtils.UpperCaseSecond(s)) ); } private void CancelBtn_Clicked(object sender, EventArgs e) { Navigation.PopAsync(); } private void SaveBtn_Clicked(object sender, EventArgs e) { OnPageSaved(Items.Where(x => x.Selected == true), Columnnumber, ColumnName) ; Navigation.PopAsync(); } private void Item_Tapped(object sender, EventArgs e) { var selecteditem = listView.SelectedItem as MultiSelectPageViewItem; var item = Items.FirstOrDefault(x => x.Value == selecteditem.Value); item.Selected = item.Selected == true ? false : true; } private void SelectAll_Clicked(object sender, EventArgs e) { foreach (var item in Items) item.Selected = true; } private void ClearAll_Clicked(object sender, EventArgs e) { foreach (var item in Items) item.Selected = false; } } public class MultiSelectPageViewItem : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; private bool selected; public string Value { get; set; } public bool Selected { get => selected; set { selected = value; OnPropertyChanged("Selected"); } } public MultiSelectPageViewItem() { Value = ""; Selected = false; } protected virtual void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } }