initial load
This commit is contained in:
23
YouTubeViewers.WPF/ViewModels/AddYouTubeViewerViewModel.cs
Normal file
23
YouTubeViewers.WPF/ViewModels/AddYouTubeViewerViewModel.cs
Normal file
@ -0,0 +1,23 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Input;
|
||||
using YouTubeViewers.WPF.Commands;
|
||||
using YouTubeViewers.WPF.Stores;
|
||||
|
||||
namespace YouTubeViewers.WPF.ViewModels;
|
||||
|
||||
public class AddYouTubeViewerViewModel : ViewModelBase
|
||||
{
|
||||
public YouTubeViewerDetailsFormViewModel YouTubeViewerDetailsFormViewModel { get; }
|
||||
|
||||
public AddYouTubeViewerViewModel(YouTubeViewersStore _youTubeViewersStore, ModalNavigationStore modalNavigationStore)
|
||||
{
|
||||
ICommand cancelCommand = new CloseModalCommand( modalNavigationStore);
|
||||
ICommand submitCommand = new AddYouTubeViewerCommand(this , _youTubeViewersStore,modalNavigationStore);
|
||||
YouTubeViewerDetailsFormViewModel = new YouTubeViewerDetailsFormViewModel(submitCommand,cancelCommand);
|
||||
}
|
||||
|
||||
}
|
||||
32
YouTubeViewers.WPF/ViewModels/EditYouTubeViewerViewModel.cs
Normal file
32
YouTubeViewers.WPF/ViewModels/EditYouTubeViewerViewModel.cs
Normal file
@ -0,0 +1,32 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
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 EditYouTubeViewerViewModel : ViewModelBase
|
||||
{
|
||||
public Guid YouTubeViewerId { get; }
|
||||
|
||||
public YouTubeViewerDetailsFormViewModel YouTubeViewerDetailsFormViewModel { get; }
|
||||
|
||||
public EditYouTubeViewerViewModel(YouTubeViewer youTubeViewer, YouTubeViewersStore _youTubeViewersStore, ModalNavigationStore modalNavigationStore)
|
||||
{
|
||||
YouTubeViewerId = youTubeViewer.Id;
|
||||
|
||||
ICommand submitCommand = new EditYouTubeViewerCommand(this, _youTubeViewersStore, modalNavigationStore);
|
||||
ICommand cancelCommand = new CloseModalCommand(modalNavigationStore);
|
||||
YouTubeViewerDetailsFormViewModel = new YouTubeViewerDetailsFormViewModel(submitCommand, cancelCommand)
|
||||
{
|
||||
UserName = youTubeViewer.Username,
|
||||
IsSubScribed = youTubeViewer.IsSubscribed,
|
||||
IsMember = youTubeViewer.IsMember
|
||||
};
|
||||
}
|
||||
}
|
||||
38
YouTubeViewers.WPF/ViewModels/MainViewModel.cs
Normal file
38
YouTubeViewers.WPF/ViewModels/MainViewModel.cs
Normal file
@ -0,0 +1,38 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using YouTubeViewers.WPF.Stores;
|
||||
|
||||
namespace YouTubeViewers.WPF.ViewModels
|
||||
{
|
||||
public class MainViewModel : ViewModelBase
|
||||
{
|
||||
private readonly ModalNavigationStore _modalNavigationStore;
|
||||
|
||||
public ViewModelBase CurrentModalViewModel => _modalNavigationStore.CurrentViewModel;
|
||||
public bool IsModalOpen => _modalNavigationStore.IsOpen;
|
||||
public YouTubeViewersViewModel YouTubeViewersViewModel { get; }
|
||||
|
||||
public MainViewModel(ModalNavigationStore modalNavigationStore, YouTubeViewersViewModel youTubeViewersViewModel)
|
||||
{
|
||||
_modalNavigationStore = modalNavigationStore;
|
||||
YouTubeViewersViewModel = youTubeViewersViewModel;
|
||||
|
||||
_modalNavigationStore.CurrentViewModelChanged += ModalNavigationStore_CurrenyViewModelChanged;
|
||||
}
|
||||
|
||||
protected override void Dispose()
|
||||
{
|
||||
_modalNavigationStore.CurrentViewModelChanged -= ModalNavigationStore_CurrenyViewModelChanged;
|
||||
base.Dispose();
|
||||
}
|
||||
|
||||
private void ModalNavigationStore_CurrenyViewModelChanged()
|
||||
{
|
||||
OnPropertyChanged(nameof(CurrentModalViewModel));
|
||||
OnPropertyChanged(nameof(IsModalOpen));
|
||||
}
|
||||
}
|
||||
}
|
||||
22
YouTubeViewers.WPF/ViewModels/ViewModelBase.cs
Normal file
22
YouTubeViewers.WPF/ViewModels/ViewModelBase.cs
Normal file
@ -0,0 +1,22 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace YouTubeViewers.WPF.ViewModels
|
||||
{
|
||||
public class ViewModelBase : INotifyPropertyChanged
|
||||
{
|
||||
public event PropertyChangedEventHandler? PropertyChanged;
|
||||
|
||||
protected virtual void OnPropertyChanged(string propertyName = null)
|
||||
{
|
||||
|
||||
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
|
||||
}
|
||||
|
||||
protected virtual void Dispose() { }
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,71 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Input;
|
||||
|
||||
namespace YouTubeViewers.WPF.ViewModels;
|
||||
|
||||
public class YouTubeViewerDetailsFormViewModel : ViewModelBase
|
||||
{
|
||||
private string _userName;
|
||||
|
||||
public string UserName
|
||||
{
|
||||
get { return _userName; }
|
||||
set
|
||||
{
|
||||
_userName = value;
|
||||
OnPropertyChanged(nameof(UserName));
|
||||
OnPropertyChanged(nameof(CanSubmit));
|
||||
}
|
||||
}
|
||||
|
||||
private bool _isSubScribed;
|
||||
|
||||
public bool IsSubScribed
|
||||
{
|
||||
get { return _isSubScribed; }
|
||||
set
|
||||
{
|
||||
_isSubScribed = value;
|
||||
OnPropertyChanged(nameof(IsSubScribed));
|
||||
}
|
||||
}
|
||||
|
||||
private bool _isMember;
|
||||
|
||||
|
||||
public bool IsMember
|
||||
{
|
||||
get { return _isMember; }
|
||||
set
|
||||
{
|
||||
_isMember = value;
|
||||
OnPropertyChanged(nameof(IsMember));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#region IsSubmitting
|
||||
|
||||
private bool _IsSubmitting;
|
||||
public bool IsSubmitting
|
||||
{
|
||||
get { return _IsSubmitting; }
|
||||
set { _IsSubmitting = value; OnPropertyChanged(nameof(IsSubmitting)); }
|
||||
}
|
||||
|
||||
#endregion IsSubmitting
|
||||
|
||||
public bool CanSubmit => !string.IsNullOrEmpty(UserName);
|
||||
public ICommand SubmitCommand { get; }
|
||||
public ICommand CancelCommand { get; }
|
||||
public YouTubeViewerDetailsFormViewModel(ICommand submitCommand, ICommand cancelCommand)
|
||||
{
|
||||
SubmitCommand = submitCommand;
|
||||
CancelCommand = cancelCommand;
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,42 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using YouTubeViewers.WPF.Stores;
|
||||
using YouTubeViewers.Domain.Models;
|
||||
|
||||
namespace YouTubeViewers.WPF.ViewModels
|
||||
{
|
||||
public class YouTubeViewersDetailsViewModel : ViewModelBase
|
||||
{
|
||||
private readonly SelectedYouTubeViewerStore _selectedYouTubeViewerStore;
|
||||
private YouTubeViewer SelectedYouTubeViewer => _selectedYouTubeViewerStore.SelectedYouTubeViewer;
|
||||
|
||||
public bool HasSelectedYouTubeViewer => SelectedYouTubeViewer != null;
|
||||
public string UserName => SelectedYouTubeViewer?.Username ?? "Unknown";
|
||||
public string IsSubScribedDisplay => (SelectedYouTubeViewer?.IsSubscribed ?? false) ? "Yes" : "No";
|
||||
public string IsMemberDisplay => (SelectedYouTubeViewer?.IsMember ?? false) ? "Yes" : "No";
|
||||
|
||||
public YouTubeViewersDetailsViewModel(SelectedYouTubeViewerStore selectedYouTubeViewerStore)
|
||||
{
|
||||
_selectedYouTubeViewerStore = selectedYouTubeViewerStore;
|
||||
|
||||
_selectedYouTubeViewerStore.SelectedYouTubeViewerChanged += SelectedYouTubeViewerStore_SelectedYouTubeViewerChanged;
|
||||
}
|
||||
|
||||
protected override void Dispose()
|
||||
{
|
||||
_selectedYouTubeViewerStore.SelectedYouTubeViewerChanged -= SelectedYouTubeViewerStore_SelectedYouTubeViewerChanged;
|
||||
base.Dispose();
|
||||
}
|
||||
|
||||
private void SelectedYouTubeViewerStore_SelectedYouTubeViewerChanged()
|
||||
{
|
||||
OnPropertyChanged(nameof(HasSelectedYouTubeViewer));
|
||||
OnPropertyChanged(nameof(UserName));
|
||||
OnPropertyChanged(nameof(IsSubScribedDisplay));
|
||||
OnPropertyChanged(nameof(IsMemberDisplay));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,40 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
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 YouTubeViewersListingItemViewModel : ViewModelBase
|
||||
{
|
||||
//private YouTubeViewer _youTubeViewer;
|
||||
//private YouTubeViewersStore _youTubeViewersStore;
|
||||
//private ModalNavigationStore _modalNavigationStore;
|
||||
|
||||
public YouTubeViewer YouTubeViewer { get; private set; }
|
||||
|
||||
public string UserName => YouTubeViewer.Username;
|
||||
|
||||
public ICommand EditCommand { get; }
|
||||
public ICommand DeleteCommand { get; }
|
||||
|
||||
public YouTubeViewersListingItemViewModel(YouTubeViewer youTubeViewer, YouTubeViewersStore youTubeViewersStore, ModalNavigationStore modalNavigationStore)
|
||||
{
|
||||
YouTubeViewer = youTubeViewer;
|
||||
|
||||
EditCommand = new OpenEditYouTubeViewerCommand(this, youTubeViewersStore, modalNavigationStore);
|
||||
DeleteCommand = new DeleteYouTubeViewerCommand(this, youTubeViewersStore);
|
||||
}
|
||||
|
||||
public void Update(YouTubeViewer youTubeViewer)
|
||||
{
|
||||
YouTubeViewer = youTubeViewer;
|
||||
OnPropertyChanged(nameof(UserName));
|
||||
}
|
||||
}
|
||||
}
|
||||
111
YouTubeViewers.WPF/ViewModels/YouTubeViewersListingViewModel.cs
Normal file
111
YouTubeViewers.WPF/ViewModels/YouTubeViewersListingViewModel.cs
Normal file
@ -0,0 +1,111 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
55
YouTubeViewers.WPF/ViewModels/YouTubeViewersViewModel.cs
Normal file
55
YouTubeViewers.WPF/ViewModels/YouTubeViewersViewModel.cs
Normal file
@ -0,0 +1,55 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Input;
|
||||
using YouTubeViewers.WPF.Commands;
|
||||
using YouTubeViewers.WPF.Stores;
|
||||
|
||||
namespace YouTubeViewers.WPF.ViewModels
|
||||
{
|
||||
public class YouTubeViewersViewModel : ViewModelBase
|
||||
{
|
||||
public YouTubeViewersListingViewModel YouTubeViewersListingViewModel { get; }
|
||||
public YouTubeViewersDetailsViewModel YouTubeViewersDetailsViewModel { get; }
|
||||
|
||||
|
||||
private bool _IsLoading;
|
||||
public bool IsLoading
|
||||
{
|
||||
get
|
||||
{
|
||||
return _IsLoading;
|
||||
}
|
||||
set
|
||||
{
|
||||
_IsLoading = value;
|
||||
OnPropertyChanged(nameof(IsLoading));
|
||||
}
|
||||
}
|
||||
|
||||
public ICommand LoadYouTubeViewersCommand { get; }
|
||||
public ICommand AddYouTubeViewersCommand { get; }
|
||||
public YouTubeViewersViewModel(YouTubeViewersStore youTubeViewersStore, SelectedYouTubeViewerStore _selectedYouTubeViewerStore, ModalNavigationStore modalNavigationStore)
|
||||
{
|
||||
|
||||
YouTubeViewersListingViewModel = new YouTubeViewersListingViewModel(youTubeViewersStore, _selectedYouTubeViewerStore, modalNavigationStore);
|
||||
YouTubeViewersDetailsViewModel = new YouTubeViewersDetailsViewModel(_selectedYouTubeViewerStore);
|
||||
LoadYouTubeViewersCommand = new LoadYouTubeViewersCommand(this,youTubeViewersStore);
|
||||
AddYouTubeViewersCommand = new OpenAddYouTubeViewerCommand(youTubeViewersStore, modalNavigationStore);
|
||||
}
|
||||
|
||||
public static YouTubeViewersViewModel LoadViewModel(
|
||||
YouTubeViewersStore youTubeViewersStore,
|
||||
SelectedYouTubeViewerStore selectedYouTubeViewerStore,
|
||||
ModalNavigationStore modalNavigationStore)
|
||||
{
|
||||
YouTubeViewersViewModel viewModel = new YouTubeViewersViewModel(youTubeViewersStore, selectedYouTubeViewerStore, modalNavigationStore);
|
||||
|
||||
viewModel.LoadYouTubeViewersCommand.Execute(null);
|
||||
|
||||
return viewModel;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user