TourList.cs 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. namespace Ageev_Exam_Tour.Model
  8. {
  9. internal class TourList : INotifyPropertyChanged // Подключил чтобы в реальном времени менять поля и дергать объекты
  10. {
  11. // Чтобы реагировать на некоторые изменение внутри свойств
  12. public event PropertyChangedEventHandler PropertyChanged;
  13. List<Tour> defaultTour;
  14. int typeId;
  15. public int TypeId
  16. {
  17. get => typeId;
  18. set {
  19. typeId = value;
  20. PropertyChanged.Invoke(this, new PropertyChangedEventArgs(nameof(TypeId)));
  21. FiltersForPage();
  22. }
  23. }
  24. // Массив для определения сортировки цены
  25. string[] priceSort = new string[] { "По умолчанию", "По возврастанию", "По убыванию" };
  26. public string[] PriceSort { get => priceSort; set => priceSort = value; }
  27. int priceID;
  28. public int PriceId {
  29. get => priceID;
  30. set
  31. {
  32. priceID = value;
  33. PropertyChanged.Invoke(this, new PropertyChangedEventArgs(nameof(PriceId)));
  34. FiltersForPage();
  35. }
  36. }
  37. decimal totalPrice;
  38. public decimal TotalPrice { get => totalPrice; set { totalPrice = value; PropertyChanged.Invoke(this, new PropertyChangedEventArgs(nameof(TotalPrice))); } }
  39. List<Type> types; // Чтобы хранить
  40. // Чтобы менять
  41. public List<Type> Types { get => types; set => types = value; }
  42. List<Tour> currentTour; // Некоторое поле в которое мы оставляем лист
  43. // Свойство с помощью которого достаём поле выше, которое можно менять
  44. public List<Tour> CurrentTour
  45. {
  46. get => currentTour;
  47. set {
  48. currentTour = value;
  49. TotalPrice = currentTour.Sum(ct => ct.Price * (decimal)ct.TicketCount );
  50. PropertyChanged.Invoke(this, new PropertyChangedEventArgs(nameof(CurrentTour)));
  51. }
  52. }
  53. // Это нужно чтобы туда помещать что мы пишем
  54. string finderText = string.Empty;
  55. // Свойство которое дергает некоторый объект в XAML
  56. public string Finder
  57. {
  58. get => finderText;
  59. set{
  60. finderText = value;
  61. PropertyChanged.Invoke(this, new PropertyChangedEventArgs(nameof(Finder)));
  62. FiltersForPage();
  63. }
  64. }
  65. private bool _isActual = false; // Чтобы изначально правильно интерпретировал
  66. public bool IsActual
  67. {
  68. get => _isActual;
  69. set
  70. {
  71. if (_isActual == value) return; // Чтобы постоянно не дёргал
  72. _isActual = value;
  73. PropertyChanged.Invoke(this, new PropertyChangedEventArgs(nameof(_isActual)));
  74. FiltersForPage();
  75. }
  76. }
  77. public TourList() // Конструктор
  78. {
  79. // Для туров
  80. defaultTour = GeneralData.myDataBase.Tour.ToList();
  81. currentTour = defaultTour;
  82. // Для типов
  83. Types = GeneralData.myDataBase.Type.ToList();
  84. Types.Insert(0, new Type { Name = "Все типы" });
  85. typeId = 0;
  86. priceID = 0;
  87. totalPrice = 0;
  88. }
  89. void FiltersForPage()
  90. {
  91. List<Tour> currentTour = GeneralData.myDataBase.Tour.ToList();
  92. if( !(string.IsNullOrEmpty(finderText)) ) // Фильтр по названию
  93. currentTour = currentTour.Where( t => t.Name.ToLower().StartsWith( finderText.ToLower() ) ).ToList();
  94. if (typeId != 0) // Фильтр по типу
  95. currentTour = currentTour.Where(ct => ct.Type.Contains(GeneralData.myDataBase.Type.FirstOrDefault(x => x.Id == typeId)) ).ToList();
  96. if (_isActual) // Фильтр по актуальности
  97. currentTour = currentTour.Where( ct => ct.IsActual == _isActual).ToList();
  98. if (priceID != 0)
  99. {
  100. if (priceID == 1)
  101. currentTour = currentTour.OrderBy( ct => ct.Price ).ToList();
  102. if (priceID == 2)
  103. currentTour = currentTour.OrderByDescending( ct => ct.Price ).ToList();
  104. }
  105. // Необходимо вызвать уже предопределённое свойство
  106. CurrentTour = currentTour;
  107. }
  108. }
  109. public partial class Tour
  110. {
  111. // Нужно чтобы сам парился с картинками
  112. public object ImageOnView {
  113. get
  114. {
  115. if (ImagePreview == null)
  116. return "..\\Res\\picture.png";
  117. else
  118. return ImagePreview;
  119. }
  120. }
  121. // Нужно чтобы сам парился с актуальностью
  122. public object IsActualString {
  123. get
  124. {
  125. if (IsActual)
  126. return "Актуален";
  127. else
  128. return "Не актуален";
  129. }
  130. }
  131. }
  132. }