Files
YouTubeViewers/YouTubeViewers.WPF/ViewModels/YouTubeViewersListingViewModel.cs

128 lines
5.2 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 _youtubeViewersListingItemViewModels
.FirstOrDefault(y => y.YouTubeViewer?.Id == _selectedYouTubeViewerStore.SelectedYouTubeViewer?.Id);
}
set
{
_selectedYouTubeViewerStore.SelectedYouTubeViewer = value?.YouTubeViewer;
}
}
public YouTubeViewersListingViewModel(
YouTubeViewersStore youTubeViewersStore,
SelectedYouTubeViewerStore selectedYouTubeViewerStore,
ModalNavigationStore modalNavigationStore)
{
_youTubeViewersStore = youTubeViewersStore;
_selectedYouTubeViewerStore = selectedYouTubeViewerStore;
_modalNavigationStore = modalNavigationStore;
_youtubeViewersListingItemViewModels = new ObservableCollection<YouTubeViewersListingItemViewModel>();
_selectedYouTubeViewerStore.SelectedYouTubeViewerChanged += _selectedYouTubeViewerStore_SelectedYouTubeViewerChanged;
_youTubeViewersStore.YouTubeViewersLoaded += _youTubeViewersStore_YouTubeViewersLoaded;
_youTubeViewersStore.YouTubeViewerAdded += YouTubeViewersStore_YouTubeViewerAdded;
_youTubeViewersStore.YouTubeViewerUpdated += YouTubeViewersStore_YouTubeViewerUpdated;
_youTubeViewersStore.YouTubeViewerDeleted += YouTubeViewersStore_YouTubeViewerDeleted;
_youtubeViewersListingItemViewModels.CollectionChanged += _youtubeViewersListingItemViewModels_CollectionChanged;
}
private void _youtubeViewersListingItemViewModels_CollectionChanged(object? sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
OnPropertyChanged(nameof(SelectedYouTubeViewerListingItemViewModel));
}
private void _selectedYouTubeViewerStore_SelectedYouTubeViewerChanged()
{
OnPropertyChanged(nameof(SelectedYouTubeViewerListingItemViewModel));
}
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()
{
_selectedYouTubeViewerStore.SelectedYouTubeViewerChanged -= _selectedYouTubeViewerStore_SelectedYouTubeViewerChanged;
_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);
}
}
}
}