/
bomjkee
/
AvaloniaEntityApp
Обзор
Документация
Войти
/
bomjkee
/
AvaloniaEntityApp
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
ViewModels/MainWindowViewModel.cs
130 строк
4 KB
bomjkee
first commit
23 фев 2025, 00:18
23 фев 2025, 00:18
e1949b1
Код
Авторство
О чём код?
using System; using System.Linq; using System.Threading.Tasks; using System.Collections.ObjectModel; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using Avalonia.Threading; using AvaloniaApp.Services; using AvaloniaApp.Models; using System.Threading.Tasks.Dataflow; namespace AvaloniaApp.ViewModels; public sealed partial class MainWindowViewModel : ViewModelBase { private readonly LibraryDataService _libraryData; [ObservableProperty] private BookViewModel _bookViewModel; [ObservableProperty] private AuthorViewModel _authorViewModel; [ObservableProperty] private GenreViewModel _genreViewModel; [ObservableProperty] private ObservableCollection<Book> _books = new ObservableCollection<Book>(); [ObservableProperty] private ObservableCollection<Author> _authors = new ObservableCollection<Author>(); [ObservableProperty] private ObservableCollection<Genre> _genres = new ObservableCollection<Genre>(); [ObservableProperty] private Author? _selectedAuthor; [ObservableProperty] private Genre? _selectedGenre; [ObservableProperty] private string _searchText = string.Empty; [ObservableProperty] private int _totalBooksCount; [ObservableProperty] private Book? _selectedBook; [ObservableProperty] private ObservableCollection<Book> _filteredBooks = new ObservableCollection<Book>(); public MainWindowViewModel( BookViewModel bookViewModel, AuthorViewModel authorViewModel, GenreViewModel genreViewModel, LibraryDataService libraryData) { _libraryData = libraryData; BookViewModel = bookViewModel; AuthorViewModel = authorViewModel; GenreViewModel = genreViewModel; _libraryData.Books.CollectionChanged += (s, e) => UpdateBooks(); _libraryData.Authors.CollectionChanged += (s, e) => UpdateAuthors(); _libraryData.Genres.CollectionChanged += (s, e) => UpdateGenres(); UpdateBooks(); UpdateAuthors(); UpdateGenres(); FilteredBooks = new ObservableCollection<Book>(Books); UpdateTotalBooksCount(); } [RelayCommand] private void Filter() { FilteredBooks = new ObservableCollection<Book>( Books.Where(b => (string.IsNullOrEmpty(SearchText) || b.Title.Contains(SearchText, StringComparison.OrdinalIgnoreCase)) && (SelectedAuthor == null || b.Author == SelectedAuthor.FullName) && (SelectedGenre == null || b.Genre == SelectedGenre.Name) ) ); UpdateTotalBooksCount(); } [RelayCommand] private void ClearFilter() { SelectedAuthor = null; SelectedGenre = null; SearchText = string.Empty; FilteredBooks = Books; UpdateTotalBooksCount(); } [RelayCommand] private static void Exit() { Environment.Exit(0); } private void UpdateBooks() { Books = new ObservableCollection<Book>(_libraryData.Books); Filter(); } private void UpdateAuthors() { Authors = new ObservableCollection<Author>(_libraryData.Authors); } private void UpdateGenres() { Genres = new ObservableCollection<Genre>(_libraryData.Genres); } private void UpdateTotalBooksCount() { Console.Write("update count"); TotalBooksCount = FilteredBooks.Sum(b => b.QuantityInStock); } }