Files
MVVMProject_MAUI/ModelViewViewModelProject/ViewModel/MainPageViewModel.cs
T
2024-11-11 19:39:56 +01:00

79 lines
2.9 KiB
C#

using ModelViewViewModelProject.Model;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Windows.Input;
namespace ModelViewViewModelProject.ViewModel
{
// Należy pamiętać o przypisaniu naszej klasy do interfejsu INotifyPropertyChanged. Wymagane jest zainicjowanie przestrzeni System.ComponentModel
class MainPageViewModel : INotifyPropertyChanged
{
// Obiekt służący do tworzenia odświeżalnej listy
public ObservableCollection<Book> Books { get; set; }
// Obiekt do stworzenia nowej książki
public Book NewBook { get; set; }
// Komendy do zarządzania tym modelem
public ICommand AddBookCmd { get; }
public ICommand IncreaseAmountBookCmd { get; }
public ICommand DecreaseAmountBookCmd { get; }
public MainPageViewModel()
{
Books = new ObservableCollection<Book>
{
new Book { Id = 1, Title = "Pan Tadeusz", Price = 29.99m, Rate = 4.5, Amount = 5 },
new Book { Id = 1, Title = "Życie na krawędzi", Price = 14.99m, Rate = 4, Amount = 3 },
new Book { Id = 1, Title = "Czym jest życie", Price = 19.99m, Rate = 5, Amount = 6 }
};
// Pusty obiekt, który służy do pobierania wartości z pól w widoku i dodawania nowej książki do listy Books.
NewBook = new Book();
// Przypisywanie utworzonych funkcji do naszych komend
AddBookCmd = new Command(AddBook);
IncreaseAmountBookCmd = new Command<Book>(IncreaseAmount);
DecreaseAmountBookCmd = new Command<Book>(DecreaseAmount);
}
private void AddBook()
{
NewBook.Id = Books.Count + 1;
Books.Add(new Book
{
Id = NewBook.Id,
Title = NewBook.Title,
Price = NewBook.Price,
Rate = NewBook.Rate,
Amount = NewBook.Amount
});
NewBook = new Book();
OnPropertyChanged(nameof(NewBook));
}
private void IncreaseAmount(Book book)
{
book.Amount++;
}
private void DecreaseAmount(Book book)
{
book.Amount--;
}
/*
* GŁÓWNE SKŁADNIKI NASZEJ STRUKTURY MVVM
* Poza przypisaniem naszej klasy MainPageViewModel do interfejsu INotifyPropertyChanged potrzebujemy również
* utworzyć zdarzenie PropertyChanged oraz funkcje OnPropertyChanged(string propertyName) które służy do
* powiadomienia naszego widoku, że nastąpiła zmiana w naszych obiektach i ma odświeżyć dane w widoku!
*/
public event PropertyChangedEventHandler? PropertyChanged;
public void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
}