|
@@ -46,7 +46,8 @@ namespace AvaloniaApplication12.ViewModels
|
|
|
}
|
|
|
|
|
|
#region Поиск, сортировка и фильтрация
|
|
|
-
|
|
|
+
|
|
|
+ // поисковая строка с поиском по имени кота:
|
|
|
string _searchCat; // поле для хранения текста, введенного в поисковую строку
|
|
|
public string SearchCat // свойство для обращения к переменной, хранящей текст из поисковой строки
|
|
|
{
|
|
@@ -57,13 +58,14 @@ namespace AvaloniaApplication12.ViewModels
|
|
|
AllFilters(); // вызываем метод для фильтрации списка по выбранным параметрам
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
+ // фильтрация по породе кота:
|
|
|
// список со всеми породами кота, в который добавлен элемент "Все породы" для сброса фильтрации
|
|
|
List<BreedTable> _breedFilter = [new BreedTable() { Id = 0, Breed = "все породы" }, .. MainWindowViewModel.myConnection.BreedTables.ToList()];
|
|
|
public List<BreedTable> BreedFilter { get => _breedFilter;} // свойство для обращению к списку со всеми породами
|
|
|
|
|
|
BreedTable _selectedBreed = null; // поле для хранения выбранной породы из списка для фильтрации по породам
|
|
|
- public BreedTable SelectedBreed // свойство дял обращения к полю с выбранной породой
|
|
|
+ public BreedTable SelectedBreed // свойство для обращения к полю с выбранной породой
|
|
|
{
|
|
|
get
|
|
|
{
|
|
@@ -80,6 +82,7 @@ namespace AvaloniaApplication12.ViewModels
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ // флажок с выбором только котов мужского пола:
|
|
|
bool _checkCat = false; // поле для хранения значения флажка для отображения только котов мужского пола (по умолчанию флажок не выбран)
|
|
|
public bool CheckCat // свойство для обращения к полю, хранящему значение флажка
|
|
|
{
|
|
@@ -91,6 +94,25 @@ namespace AvaloniaApplication12.ViewModels
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ // сортировка:
|
|
|
+ int _selectedSort = 0;// поле для хранения выбранного параметра сортировки (по умолчанию будет стоять параметр "Без сортировки")
|
|
|
+ public int SelectedSort { get => _selectedSort; set { _selectedSort = value; AllFilters(); } }// свойство, взаимодействующее с полем для хранения выбранного параметра сортировки
|
|
|
+
|
|
|
+ bool _isVisibleSort = false; // поле, которое хранит значение видимости панели, где происходит выбор сортировки по возрастанию или по убыванию
|
|
|
+ public bool IsVisibleSort { get => _isVisibleSort; set => this.RaiseAndSetIfChanged(ref _isVisibleSort,value); } // свойство, взаимодействующее с полем, хранящем значение видимости панели
|
|
|
+
|
|
|
+ bool _sortUp = true; // поле, которое хранит значение параметра сортировки по возрастанию (изначально будет автоматически выбрано)
|
|
|
+ public bool SortUp { get => _sortUp; set { this.RaiseAndSetIfChanged(ref _sortUp, value); AllFilters(); } } // свойство, взаимодействующее с полем, хранящем значение параметра сортировки по возрастанию
|
|
|
+
|
|
|
+ bool _sortDown = false;// поле, которое хранит значение параметра сортировки по убыванию
|
|
|
+ public bool SortDown { get => _sortDown; set { this.RaiseAndSetIfChanged(ref _sortDown, value); AllFilters(); } } // свойство, взаимодействующее с полем, хранящем значение параметра сортировки по убыванию
|
|
|
+
|
|
|
+ // фильтрация по чертам характера кота:
|
|
|
+ public List<TraitTable> TraitFilter => MainWindowViewModel.myConnection.TraitTables.ToList(); // список с чертами характера кота
|
|
|
+
|
|
|
+ TraitTable _selectedTraitFilter = null; // поле для хранения выбранной черты характера из списка для фильтрации по породам
|
|
|
+ public TraitTable SelectedTraitFilter { get => _selectedTraitFilter; set { _selectedTraitFilter = value; AllFilters(); } } // свойство для обращения к полю с выбранной чертой характера
|
|
|
+
|
|
|
// метод для фильтрации всего
|
|
|
void AllFilters()
|
|
|
{
|
|
@@ -115,7 +137,44 @@ namespace AvaloniaApplication12.ViewModels
|
|
|
if (_selectedBreed!=null && _selectedBreed.Id!=0)
|
|
|
{
|
|
|
CatList = CatList.Where(x => x.Breed==_selectedBreed).ToList();
|
|
|
- }
|
|
|
+ }
|
|
|
+
|
|
|
+ // список черт характера
|
|
|
+ if (_selectedTraitFilter!=null)
|
|
|
+ {
|
|
|
+ CatList = CatList.Where(x=>x.TraitCatTables.Any(y=>y.Trait.Id ==_selectedTraitFilter.Id)).ToList();
|
|
|
+ // Any() возвращает true, если в коллекции есть хот бы один элемент, удовлетворяющий условию
|
|
|
+ }
|
|
|
+
|
|
|
+ // сортировка
|
|
|
+ switch(_selectedSort)
|
|
|
+ {
|
|
|
+ case 0: // если выбран параметр Без сортировки
|
|
|
+ IsVisibleSort = false;
|
|
|
+ break;
|
|
|
+ case 1: // если выбран параметр по весу
|
|
|
+ IsVisibleSort = true;
|
|
|
+ if (_sortDown)
|
|
|
+ {
|
|
|
+ CatList = CatList.OrderByDescending(x => x.Weight).ToList();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ CatList = CatList.OrderBy(x => x.Weight).ToList();
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 2: // если выбран параметр по дате рождения
|
|
|
+ IsVisibleSort = true;
|
|
|
+ if (_sortDown)
|
|
|
+ {
|
|
|
+ CatList = CatList.OrderByDescending(x => x.Birthday).ToList();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ CatList = CatList.OrderBy(x => x.Birthday).ToList();
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
#endregion
|
|
|
}
|