using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.ComponentModel; using System.Windows.Controls; using System.Windows; namespace MyWpfApp.models { /// /// источник данных для списка пользователей на соответствующей странице /// internal class UserListModel:INotifyPropertyChanged { List users;//возвращаемый в ItemsSource список пользователей List roles;//список ролей (загружается в соответствующий ComboBox) int idRole; string surname; /// /// задаем в конструкторе значения по умолчанию /// public UserListModel() { users = Globals.MyGlobalConnection.UserTable.ToList();//список из базы roles = Globals.MyGlobalConnection.Roles.ToList();//список из базы roles.Add(new Roles() { ID = 0, Role = "Все роли" }); //добавляем элемент для списка в ComboBox (в базе его нет) idRole = 0;//значение первого элемента списка } /// /// свойство для списка пользователей /// public List Users { get=>users; set { users = value; PropertyChanged.Invoke(this, new PropertyChangedEventArgs(nameof(Users))); } } /// /// свойство для списка ролей. Его мы не изменяем, а только получаем (поэтому нет set) /// public List Roles { get => roles; } /// /// свойство для изменения ID роли. срабатывает при изменении пункта из ComboBox на странице /// public int IdRole { get => idRole; set { idRole = value; PropertyChanged.Invoke(this, new PropertyChangedEventArgs(nameof(IdRole))); AllFilters(); } } /// /// по аналогии с предыдущим срабатывает при изменении текстового поля на странице /// public string Surname { get => surname; set { surname = value; PropertyChanged.Invoke(this, new PropertyChangedEventArgs(nameof(Surname))); AllFilters(); } } /// /// метод, в котором применяются сразу все доступные фильтры /// void AllFilters() { List userFiltered = Globals.MyGlobalConnection.UserTable.ToList(); if (idRole !=0) userFiltered = userFiltered.Where(x => x.LoginedTable.IDRole == idRole).ToList(); if (surname != null) userFiltered = userFiltered.Where(x => x.Surname.StartsWith(surname)).ToList(); Users = userFiltered; } string zaglushkaPath; public string ZaglushkaPath { get { MessageBox.Show("ok"); return zaglushkaPath; } set => zaglushkaPath = "/Resources/zaglushka.png"; } public event PropertyChangedEventHandler PropertyChanged; } }