/
bomjkee
/
AvaloniaEntityApp
Обзор
Документация
Войти
/
bomjkee
/
AvaloniaEntityApp
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
ViewModels/BookViewModel.cs
167 строк
4 KB
bomjkee
first commit
23 фев 2025, 00:18
23 фев 2025, 00:18
e1949b1
Код
Авторство
О чём код?
using System.Collections.ObjectModel; using System.Linq; using System.Threading.Tasks; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using AvaloniaApp.Services; using AvaloniaApp.Models; namespace AvaloniaApp.ViewModels; public partial class BookViewModel : ViewModelBase { private readonly LibraryDataService _libraryData; [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 Book? _selectedBook; [ObservableProperty] private Author? _selectedAuthor; [ObservableProperty] private Genre? _selectedGenre; [ObservableProperty] private string _title = string.Empty; [ObservableProperty] private int _publishYear; [ObservableProperty] private string? _isbn = string.Empty; [ObservableProperty] private int _quantityInStock; public BookViewModel(LibraryDataService libraryData) { _libraryData = libraryData; _books = _libraryData.Books; _authors = _libraryData.Authors; _genres = _libraryData.Genres; _libraryData.Books.CollectionChanged += (s, e) => UpdateBooks(); _libraryData.Authors.CollectionChanged += (s, e) => UpdateAuthors(); _libraryData.Genres.CollectionChanged += (s, e) => UpdateGenres(); UpdateBooks(); UpdateAuthors(); UpdateGenres(); } [RelayCommand] private async Task AddBookAsync() { if (SelectedAuthor == null || SelectedGenre == null) { return; } var book = new Book { Title = Title, Author = SelectedAuthor.FullName, PublishYear = PublishYear, ISBN = Isbn, Genre = SelectedGenre.Name, QuantityInStock = QuantityInStock, AuthorId = SelectedAuthor.Id, GenreId = SelectedGenre.Id }; await _libraryData.AddBookAsync(book); ClearInput(); } [RelayCommand] private async Task UpdateBookAsync() { if (SelectedBook == null || SelectedAuthor == null || SelectedGenre == null) return; SelectedBook.Title = Title; SelectedBook.Author = SelectedAuthor.FullName; SelectedBook.PublishYear = PublishYear; SelectedBook.ISBN = Isbn; SelectedBook.Genre = SelectedGenre.Name; SelectedBook.QuantityInStock = QuantityInStock; SelectedBook.AuthorId = SelectedAuthor.Id; SelectedBook.GenreId = SelectedGenre.Id; await _libraryData.UpdateBookAsync(SelectedBook); ClearInput(); } [RelayCommand] private async Task DeleteBookAsync() { if (SelectedBook == null) return; await _libraryData.DeleteBookAsync(SelectedBook); ClearInput(); } [RelayCommand] private void ClearInput() { Title = string.Empty; SelectedAuthor = null; SelectedGenre = null; PublishYear = 0; Isbn = string.Empty; QuantityInStock = 0; SelectedBook = null; } [RelayCommand] private void SelectBook() { if (SelectedBook == null) return; Title = SelectedBook.Title; SelectedAuthor = Authors.FirstOrDefault(a => a.Id == SelectedBook.AuthorId); SelectedGenre = Genres.FirstOrDefault(g => g.Id == SelectedBook.GenreId); PublishYear = SelectedBook.PublishYear; Isbn = SelectedBook.ISBN; QuantityInStock = SelectedBook.QuantityInStock; } private void UpdateBooks() { Books = new ObservableCollection<Book>(_libraryData.Books); } private void UpdateAuthors() { Authors = new ObservableCollection<Author>(_libraryData.Authors); } private void UpdateGenres() { Genres = new ObservableCollection<Genre>(_libraryData.Genres); } partial void OnSelectedBookChanged(Book? value) { if (value != null) { Title = value.Title; SelectedAuthor = Authors.FirstOrDefault(a => a.Id == value.AuthorId); SelectedGenre = Genres.FirstOrDefault(g => g.Id == value.GenreId); PublishYear = value.PublishYear; Isbn = value.ISBN; QuantityInStock = value.QuantityInStock; } } }