123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace Ageev_Exam_Tour.Model
- {
- internal class TourList : INotifyPropertyChanged // Подключил чтобы в реальном времени менять поля и дергать объекты
- {
- // Чтобы реагировать на некоторые изменение внутри свойств
- public event PropertyChangedEventHandler PropertyChanged;
- List<Tour> defaultTour;
- int typeId;
- public int TypeId
- {
- get => typeId;
- set {
- typeId = value;
- PropertyChanged.Invoke(this, new PropertyChangedEventArgs(nameof(TypeId)));
- FiltersForPage();
- }
- }
- // Массив для определения сортировки цены
- string[] priceSort = new string[] { "По умолчанию", "По возврастанию", "По убыванию" };
- public string[] PriceSort { get => priceSort; set => priceSort = value; }
- int priceID;
- public int PriceId {
- get => priceID;
- set
- {
- priceID = value;
- PropertyChanged.Invoke(this, new PropertyChangedEventArgs(nameof(PriceId)));
- FiltersForPage();
- }
- }
- decimal totalPrice;
- public decimal TotalPrice { get => totalPrice; set { totalPrice = value; PropertyChanged.Invoke(this, new PropertyChangedEventArgs(nameof(TotalPrice))); } }
-
-
- List<Type> types; // Чтобы хранить
- // Чтобы менять
- public List<Type> Types { get => types; set => types = value; }
- List<Tour> currentTour; // Некоторое поле в которое мы оставляем лист
- // Свойство с помощью которого достаём поле выше, которое можно менять
- public List<Tour> CurrentTour
- {
- get => currentTour;
- set {
- currentTour = value;
- TotalPrice = currentTour.Sum(ct => ct.Price * (decimal)ct.TicketCount );
- PropertyChanged.Invoke(this, new PropertyChangedEventArgs(nameof(CurrentTour)));
- }
- }
- // Это нужно чтобы туда помещать что мы пишем
- string finderText = string.Empty;
- // Свойство которое дергает некоторый объект в XAML
- public string Finder
- {
- get => finderText;
-
- set{
- finderText = value;
- PropertyChanged.Invoke(this, new PropertyChangedEventArgs(nameof(Finder)));
- FiltersForPage();
- }
- }
- private bool _isActual = false; // Чтобы изначально правильно интерпретировал
- public bool IsActual
- {
- get => _isActual;
- set
- {
- if (_isActual == value) return; // Чтобы постоянно не дёргал
- _isActual = value;
-
- PropertyChanged.Invoke(this, new PropertyChangedEventArgs(nameof(_isActual)));
- FiltersForPage();
- }
- }
- public TourList() // Конструктор
- {
- // Для туров
- defaultTour = GeneralData.myDataBase.Tour.ToList();
- currentTour = defaultTour;
- // Для типов
- Types = GeneralData.myDataBase.Type.ToList();
- Types.Insert(0, new Type { Name = "Все типы" });
- typeId = 0;
- priceID = 0;
- totalPrice = 0;
- }
- void FiltersForPage()
- {
- List<Tour> currentTour = GeneralData.myDataBase.Tour.ToList();
- if( !(string.IsNullOrEmpty(finderText)) ) // Фильтр по названию
- currentTour = currentTour.Where( t => t.Name.ToLower().StartsWith( finderText.ToLower() ) ).ToList();
- if (typeId != 0) // Фильтр по типу
- currentTour = currentTour.Where(ct => ct.Type.Contains(GeneralData.myDataBase.Type.FirstOrDefault(x => x.Id == typeId)) ).ToList();
- if (_isActual) // Фильтр по актуальности
- currentTour = currentTour.Where( ct => ct.IsActual == _isActual).ToList();
- if (priceID != 0)
- {
- if (priceID == 1)
- currentTour = currentTour.OrderBy( ct => ct.Price ).ToList();
- if (priceID == 2)
- currentTour = currentTour.OrderByDescending( ct => ct.Price ).ToList();
- }
- // Необходимо вызвать уже предопределённое свойство
- CurrentTour = currentTour;
- }
- }
- public partial class Tour
- {
- // Нужно чтобы сам парился с картинками
- public object ImageOnView {
- get
- {
- if (ImagePreview == null)
- return "..\\Res\\picture.png";
- else
- return ImagePreview;
- }
- }
- // Нужно чтобы сам парился с актуальностью
- public object IsActualString {
- get
- {
- if (IsActual)
- return "Актуален";
- else
- return "Не актуален";
- }
- }
- }
- }
|