mirror of
https://github.com/PacktPublishing/Learn-WinUI-3-Second-Edition.git
synced 2026-06-20 12:23:09 +00:00
Add chapter 4 completed solution
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using Microsoft.UI.Xaml.Input;
|
||||
using MyMediaCollection.Interfaces;
|
||||
using MyMediaCollection.Model;
|
||||
using System.Collections.ObjectModel;
|
||||
|
||||
namespace MyMediaCollection.ViewModels
|
||||
{
|
||||
public partial class MainViewModel : ObservableObject
|
||||
{
|
||||
[ObservableProperty]
|
||||
private string selectedMedium;
|
||||
[ObservableProperty]
|
||||
private ObservableCollection<MediaItem> items = new ObservableCollection<MediaItem>();
|
||||
private ObservableCollection<MediaItem> allItems;
|
||||
[ObservableProperty]
|
||||
private ObservableCollection<string> mediums;
|
||||
[ObservableProperty]
|
||||
[NotifyCanExecuteChangedFor(nameof(DeleteCommand))]
|
||||
private MediaItem selectedMediaItem;
|
||||
private INavigationService _navigationService;
|
||||
private IDataService _dataService;
|
||||
private const string AllMediums = "All";
|
||||
|
||||
public MainViewModel(INavigationService navigationService, IDataService dataService)
|
||||
{
|
||||
_navigationService = navigationService;
|
||||
_dataService = dataService;
|
||||
|
||||
PopulateData();
|
||||
}
|
||||
|
||||
public void PopulateData()
|
||||
{
|
||||
Items.Clear();
|
||||
|
||||
foreach (var item in _dataService.GetItems())
|
||||
{
|
||||
Items.Add(item);
|
||||
}
|
||||
|
||||
allItems = new ObservableCollection<MediaItem>(Items);
|
||||
|
||||
Mediums = new ObservableCollection<string>
|
||||
{
|
||||
AllMediums
|
||||
};
|
||||
|
||||
foreach (var itemType in _dataService.GetItemTypes())
|
||||
{
|
||||
Mediums.Add(itemType.ToString());
|
||||
}
|
||||
|
||||
SelectedMedium = Mediums[0];
|
||||
}
|
||||
|
||||
partial void OnSelectedMediumChanged(string value)
|
||||
{
|
||||
Items.Clear();
|
||||
|
||||
foreach (var item in allItems)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(value)
|
||||
|| value == "All"
|
||||
|| value == item.MediaType.ToString())
|
||||
{
|
||||
Items.Add(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void AddEdit()
|
||||
{
|
||||
var selectedItemId = -1;
|
||||
|
||||
if (SelectedMediaItem != null)
|
||||
{
|
||||
selectedItemId = SelectedMediaItem.Id;
|
||||
}
|
||||
|
||||
_navigationService.NavigateTo("ItemDetailsPage", selectedItemId);
|
||||
}
|
||||
|
||||
public void ListViewDoubleTapped(object sender, DoubleTappedRoutedEventArgs e)
|
||||
{
|
||||
AddEdit();
|
||||
}
|
||||
|
||||
[RelayCommand(CanExecute = nameof(CanDeleteItem))]
|
||||
private void Delete()
|
||||
{
|
||||
allItems.Remove(SelectedMediaItem);
|
||||
Items.Remove(SelectedMediaItem);
|
||||
}
|
||||
|
||||
private bool CanDeleteItem() => SelectedMediaItem != null;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user