123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- using ApplicationAvalonia.Models;
- using CommunityToolkit.Mvvm.ComponentModel;
- using CommunityToolkit.Mvvm.Input;
- using DryIoc.ImTools;
- using Microsoft.EntityFrameworkCore;
- using MsBox.Avalonia.Enums;
- using MsBox.Avalonia;
- using System;
- using System.Collections.Generic;
- using System.Collections.ObjectModel;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using MsBox.Avalonia.ViewModels.Commands;
- using System.ComponentModel;
- using OpenGL;
- using Pango;
- namespace ApplicationAvalonia.ViewModels
- {
- internal partial class HomeViewModel : ViewModelBase, INotifyPropertyChanged
- {
- PageSwitcher pgSwitch;
- [ObservableProperty]
- List<Film> _listFilms;
- [ObservableProperty]
- List<Film> _listStorage;
- [ObservableProperty]
- List<Genre> genres;
- [ObservableProperty]
- string _textSearch = string.Empty;
- static List<int> valuesOfGenre = new List<int>();
- partial void OnTextSearchChanged(string value) { AllFilters(); }
- public HomeViewModel(ref PageSwitcher pgSwitch)
- {
- this.pgSwitch = pgSwitch;
- ListFilms = dbContext.Films.Include(x => x.FilmAndGenres).ThenInclude(x => x.Genre).Include(x => x.DirectorsAndFilms)
- .ThenInclude(x => x.IdDirectorNavigation).ToList();
- Genres = dbContext.Genres.ToList();
- ListStorage = ListFilms;
- }
- private void AllFilters()
- {
- ListFilms = ListStorage;
- if (valuesOfGenre.Count() > 0)
- {
- var filmsAndGenre = dbContext.FilmAndGenres.ToList(); // беру таблицу фильмов и жанров
- List<int> idOfFilms = new List<int>(); // создаю список под все перечисленные фильмы
- foreach (var genre in valuesOfGenre) // шагаю по всем жанрам и беру фильмы по ним (без повторов)
- {
- var items = filmsAndGenre.Where(x => x.GenreId == genre).Select(x => x.FilmId).ToList();
- var unique = items.Except(idOfFilms);
- idOfFilms.AddRange(unique);
- }
- var newListFilms = new List<Film>(); // создаю объекты фильмов
- foreach (var film in idOfFilms) // добавляю каждый фильм из ранее найденных
- {
- var currentFilm = ListStorage.Find(x => x.Id == film);
- if (currentFilm != null)
- {
- newListFilms.Add(currentFilm);
- }
- }
- ListFilms = newListFilms; // отображаю на страницу
- }
- if (TextSearch.Trim() != string.Empty)
- {
- ListFilms = ListFilms.Where(x => x.Name.ToLower().Contains(TextSearch.ToLower())).ToList();
- }
- }
- [RelayCommand]
- private async void FilmInfo(int IdFilm)
- {
- var currentFilm = ListFilms.Find(x => x.Id == IdFilm);
- if (currentFilm != null)
- {
- valuesOfGenre = new List<int>();
- this.pgSwitch.View = new InfoFilmViewModel(ref pgSwitch, currentFilm);
- return;
- }
- var box = MessageBoxManager.GetMessageBoxStandard("Сообщение", "Что то пошло не так",
- ButtonEnum.Ok, Icon.Error);
- var result = await box.ShowAsync();
- }
- [RelayCommand]
- private void CallCategory()
- {
- AllFilters();
- }
- public static void TakeCategory(int IdCategory)
- {
- // Тут приходят команды из юзер контроль но в целом это костыль на check`ах
- // Лучше поставить на CallCategory с ID в аргументе
- if (!valuesOfGenre.Contains(IdCategory))
- {
- valuesOfGenre.Add(IdCategory);
- }
- else
- {
- valuesOfGenre.Remove(IdCategory);
- }
- }
- [RelayCommand]
- private void GoToPersonalCabinet()
- {
- this.pgSwitch.View = new PersonalCabinetViewModel(ref pgSwitch);
- }
- }
- }
|