Files
YouTubeViewers/YouTubeViewers.WPF/ViewModels/YouTubeViewersListingViewModel.cs
2022-08-22 15:56:12 +02:00

112 lines
4.5 KiB
C#

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using YouTubeViewers.WPF.Commands;
using YouTubeViewers.Domain.Models;
using YouTubeViewers.WPF.Stores;
namespace YouTubeViewers.WPF.ViewModels
{
public class YouTubeViewersListingViewModel : ViewModelBase
{
private readonly ObservableCollection<YouTubeViewersListingItemViewModel> _youtubeViewersListingItemViewModels;
private readonly YouTubeViewersStore _youTubeViewersStore;
private readonly SelectedYouTubeViewerStore _selectedYouTubeViewerStore;
private readonly ModalNavigationStore _modalNavigationStore;
public IEnumerable<YouTubeViewersListingItemViewModel> YouTubeViewersListingItemViewModels => _youtubeViewersListingItemViewModels;
private YouTubeViewersListingItemViewModel _selectedYouTubeViewerListingItemViewModel;
public YouTubeViewersListingItemViewModel SelectedYouTubeViewerListingItemViewModel
{
get { return _selectedYouTubeViewerListingItemViewModel; }
set
{
_selectedYouTubeViewerListingItemViewModel = value;
OnPropertyChanged(nameof(SelectedYouTubeViewerListingItemViewModel));
_selectedYouTubeViewerStore.SelectedYouTubeViewer = _selectedYouTubeViewerListingItemViewModel?.YouTubeViewer;
}
}
public YouTubeViewersListingViewModel(
YouTubeViewersStore youTubeViewersStore,
SelectedYouTubeViewerStore selectedYouTubeViewerStore,
ModalNavigationStore modalNavigationStore)
{
_youTubeViewersStore = youTubeViewersStore;
_selectedYouTubeViewerStore = selectedYouTubeViewerStore;
_modalNavigationStore = modalNavigationStore;
_youtubeViewersListingItemViewModels = new ObservableCollection<YouTubeViewersListingItemViewModel>();
_youTubeViewersStore.YouTubeViewersLoaded += _youTubeViewersStore_YouTubeViewersLoaded;
_youTubeViewersStore.YouTubeViewerAdded += YouTubeViewersStore_YouTubeViewerAdded;
_youTubeViewersStore.YouTubeViewerUpdated += YouTubeViewersStore_YouTubeViewerUpdated;
_youTubeViewersStore.YouTubeViewerDeleted += YouTubeViewersStore_YouTubeViewerDeleted;
}
private void _youTubeViewersStore_YouTubeViewersLoaded()
{
_youtubeViewersListingItemViewModels.Clear();
foreach (YouTubeViewer youTubeViewer in _youTubeViewersStore.YouTubeViewers)
{
AddYouTubeViewer(youTubeViewer);
}
}
private void YouTubeViewersStore_YouTubeViewerUpdated(YouTubeViewer youTubeViewer)
{
YouTubeViewersListingItemViewModel youTubeViewerViewModel =
_youtubeViewersListingItemViewModels.FirstOrDefault(x => x.YouTubeViewer.Id == youTubeViewer.Id);
if (youTubeViewerViewModel != null)
{
youTubeViewerViewModel.Update(youTubeViewer);
}
}
protected override void Dispose()
{
_youTubeViewersStore.YouTubeViewersLoaded -= _youTubeViewersStore_YouTubeViewersLoaded;
_youTubeViewersStore.YouTubeViewerAdded -= YouTubeViewersStore_YouTubeViewerAdded;
_youTubeViewersStore.YouTubeViewerUpdated -= YouTubeViewersStore_YouTubeViewerUpdated;
_youTubeViewersStore.YouTubeViewerDeleted -= YouTubeViewersStore_YouTubeViewerDeleted;
base.Dispose();
}
private void YouTubeViewersStore_YouTubeViewerAdded(YouTubeViewer youTubeViewer)
{
AddYouTubeViewer(youTubeViewer);
}
private void AddYouTubeViewer(YouTubeViewer youTubeViewer)
{
YouTubeViewersListingItemViewModel itemViewModel =
new YouTubeViewersListingItemViewModel(youTubeViewer, _youTubeViewersStore, _modalNavigationStore);
_youtubeViewersListingItemViewModels.Add(itemViewModel);
}
private void YouTubeViewersStore_YouTubeViewerDeleted(Guid id)
{
YouTubeViewersListingItemViewModel itemViewModel = _youtubeViewersListingItemViewModels.FirstOrDefault(y => y.YouTubeViewer?.Id == id);
if (itemViewModel != null)
{
_youtubeViewersListingItemViewModels.Remove(itemViewModel);
}
}
}
}