UserListModel.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.ComponentModel;
  7. using System.Windows.Controls;
  8. using System.Windows;
  9. namespace MyWpfApp.models
  10. {
  11. /// <summary>
  12. /// источник данных для списка пользователей на соответствующей странице
  13. /// </summary>
  14. internal class UserListModel:INotifyPropertyChanged
  15. {
  16. List<UserTable> users;//возвращаемый в ItemsSource список пользователей
  17. List<Roles> roles;//список ролей (загружается в соответствующий ComboBox)
  18. int idRole;
  19. string surname;
  20. /// <summary>
  21. /// задаем в конструкторе значения по умолчанию
  22. /// </summary>
  23. public UserListModel()
  24. {
  25. users = Globals.MyGlobalConnection.UserTable.ToList();//список из базы
  26. roles = Globals.MyGlobalConnection.Roles.ToList();//список из базы
  27. roles.Add(new Roles() { ID = 0, Role = "Все роли" }); //добавляем элемент для списка в ComboBox (в базе его нет)
  28. idRole = 0;//значение первого элемента списка
  29. }
  30. /// <summary>
  31. /// свойство для списка пользователей
  32. /// </summary>
  33. public List<UserTable> Users { get=>users; set
  34. {
  35. users = value;
  36. PropertyChanged.Invoke(this, new PropertyChangedEventArgs(nameof(Users)));
  37. }
  38. }
  39. /// <summary>
  40. /// свойство для списка ролей. Его мы не изменяем, а только получаем (поэтому нет set)
  41. /// </summary>
  42. public List<Roles> Roles { get => roles; }
  43. /// <summary>
  44. /// свойство для изменения ID роли. срабатывает при изменении пункта из ComboBox на странице
  45. /// </summary>
  46. public int IdRole { get => idRole;
  47. set
  48. {
  49. idRole = value;
  50. PropertyChanged.Invoke(this, new PropertyChangedEventArgs(nameof(IdRole)));
  51. AllFilters();
  52. }
  53. }
  54. /// <summary>
  55. /// по аналогии с предыдущим срабатывает при изменении текстового поля на странице
  56. /// </summary>
  57. public string Surname { get => surname; set
  58. {
  59. surname = value;
  60. PropertyChanged.Invoke(this, new PropertyChangedEventArgs(nameof(Surname)));
  61. AllFilters();
  62. }
  63. }
  64. /// <summary>
  65. /// метод, в котором применяются сразу все доступные фильтры
  66. /// </summary>
  67. void AllFilters()
  68. {
  69. List<UserTable> userFiltered = Globals.MyGlobalConnection.UserTable.ToList();
  70. if (idRole !=0) userFiltered = userFiltered.Where(x => x.LoginedTable.IDRole == idRole).ToList();
  71. if (surname != null) userFiltered = userFiltered.Where(x => x.Surname.StartsWith(surname)).ToList();
  72. Users = userFiltered;
  73. }
  74. string zaglushkaPath;
  75. public string ZaglushkaPath { get { MessageBox.Show("ok"); return zaglushkaPath; } set => zaglushkaPath = "/Resources/zaglushka.png"; }
  76. public event PropertyChangedEventHandler PropertyChanged;
  77. }
  78. }