diff --git a/Apollon.WPF/App.xaml.cs b/Apollon.WPF/App.xaml.cs index 8bc3dff..e71b1c0 100644 --- a/Apollon.WPF/App.xaml.cs +++ b/Apollon.WPF/App.xaml.cs @@ -55,10 +55,10 @@ namespace Apollon.WPF context.Database.Migrate(); } - OverviewViewModel overviewViewModel = new OverviewViewModel( - _tournamentStore, + OverviewViewModel overviewViewModel = OverviewViewModel.LoadViewModel( _selectedTournamentStore, _modalNavigationStore, + _tournamentStore, _navigationStore); _navigationStore.CurrentViewModel = new OverviewViewModel( diff --git a/Apollon.WPF/Commands/AddTournamentCommand.cs b/Apollon.WPF/Commands/AddTournamentCommand.cs index 65e3c0e..bf6ce4c 100644 --- a/Apollon.WPF/Commands/AddTournamentCommand.cs +++ b/Apollon.WPF/Commands/AddTournamentCommand.cs @@ -47,6 +47,7 @@ namespace Apollon.WPF.Commands await _tournamentStore.Add(tournament); _modalNavigationStore.Close(); + } catch (Exception) { diff --git a/Apollon.WPF/Commands/LoadTournamentsCommand.cs b/Apollon.WPF/Commands/LoadTournamentsCommand.cs index 541acdd..aa8902b 100644 --- a/Apollon.WPF/Commands/LoadTournamentsCommand.cs +++ b/Apollon.WPF/Commands/LoadTournamentsCommand.cs @@ -1,4 +1,5 @@ using Apollon.WPF.Stores; +using Apollon.WPF.ViewModels; using System; using System.Collections.Generic; using System.Linq; @@ -9,15 +10,19 @@ namespace Apollon.WPF.Commands { public class LoadTournamentsCommand : AsyncCommandBase { + private readonly OverviewViewModel _overviewViewModel; private readonly TournamentsStore _tournamentStore; - public LoadTournamentsCommand(TournamentsStore tournamentStore) + public LoadTournamentsCommand(OverviewViewModel overviewViewModel, TournamentsStore tournamentStore) { + _overviewViewModel = overviewViewModel; _tournamentStore = tournamentStore; } public override async Task ExecuteAsync(object parameter) { + _overviewViewModel.IsLoading = true; + try { await _tournamentStore.Load(); @@ -26,6 +31,10 @@ namespace Apollon.WPF.Commands { throw; } + finally + { + _overviewViewModel.IsLoading = false; + } } } } diff --git a/Apollon.WPF/Stores/TournamentsStore.cs b/Apollon.WPF/Stores/TournamentsStore.cs index 61e705d..d35a7f0 100644 --- a/Apollon.WPF/Stores/TournamentsStore.cs +++ b/Apollon.WPF/Stores/TournamentsStore.cs @@ -50,6 +50,9 @@ namespace Apollon.WPF.Stores public async Task Add(Tournament tournament) { await _createTournamentCommand.Execute(tournament); + + _tournaments.Add(tournament); + TournamentAdded?.Invoke(tournament); } @@ -59,7 +62,7 @@ namespace Apollon.WPF.Stores int currentIndex = _tournaments.FindIndex(y => y.Id == tournament.Id); - if (currentIndex == -1) + if (currentIndex != -1) { _tournaments[currentIndex] = tournament; } diff --git a/Apollon.WPF/ViewModels/OverviewListingItemViewModel.cs b/Apollon.WPF/ViewModels/OverviewListingItemViewModel.cs index f40c467..23cf11c 100644 --- a/Apollon.WPF/ViewModels/OverviewListingItemViewModel.cs +++ b/Apollon.WPF/ViewModels/OverviewListingItemViewModel.cs @@ -17,16 +17,14 @@ namespace Apollon.WPF.ViewModels public string TournamentName => Tournament.TournamentName; public string Location => Tournament.Location; - public ICommand EditCommand { get; } - //public ICommand DeleteCommand { get; } + public ICommand EditCommand { get; } public ICommand WarningDeleteCommand { get; } public OverviewListingItemViewModel(Tournament tournament, TournamentsStore tournamentStore, ModalNavigationStore modalNavigationStore) { Tournament = tournament; - EditCommand = new OpenEditTournamentCommand(this, tournamentStore, modalNavigationStore); - //DeleteCommand = new DeleteTournamentCommand(this, tournamentStore); + EditCommand = new OpenEditTournamentCommand(this, tournamentStore, modalNavigationStore); WarningDeleteCommand = new OpenWarningDeleteCommand(this, modalNavigationStore, tournamentStore); } diff --git a/Apollon.WPF/ViewModels/OverviewListingViewModel.cs b/Apollon.WPF/ViewModels/OverviewListingViewModel.cs index 34daa66..b236f3a 100644 --- a/Apollon.WPF/ViewModels/OverviewListingViewModel.cs +++ b/Apollon.WPF/ViewModels/OverviewListingViewModel.cs @@ -33,16 +33,13 @@ namespace Apollon.WPF.ViewModels } } - public ICommand LoadTournamentsCommand { get;} public OverviewListingViewModel(SelectedTournamentsStore selectedTournamentStore, ModalNavigationStore modalNavigationStore, TournamentsStore tournamentStore) { _tournamentStore = tournamentStore; _selectedTournamentStore = selectedTournamentStore; _modalNavigationStore = modalNavigationStore; - _overviewListingItemViewModels = new ObservableCollection(); - - LoadTournamentsCommand = new LoadTournamentsCommand(tournamentStore); + _overviewListingItemViewModels = new ObservableCollection(); _selectedTournamentStore.SelectedTournamentChanged += SelectedTournamentStore_SelectedTournamentChanged; @@ -52,16 +49,7 @@ namespace Apollon.WPF.ViewModels _tournamentStore.TournamentDeleted += TournamentStore_TournamentDeleted; _overviewListingItemViewModels.CollectionChanged += OverviewListingItemViewModels_CollectionChanged; - } - - public static OverviewListingViewModel LoadViewModel(SelectedTournamentsStore selectedTournamentStore, ModalNavigationStore modalNavigationStore, TournamentsStore tournamentStore) - { - OverviewListingViewModel viewModel = new OverviewListingViewModel(selectedTournamentStore, modalNavigationStore, tournamentStore); - - viewModel.LoadTournamentsCommand.Execute(null); - - return viewModel; - } + } protected override void Dispose() { diff --git a/Apollon.WPF/ViewModels/OverviewViewModel.cs b/Apollon.WPF/ViewModels/OverviewViewModel.cs index e607ba1..c88d71a 100644 --- a/Apollon.WPF/ViewModels/OverviewViewModel.cs +++ b/Apollon.WPF/ViewModels/OverviewViewModel.cs @@ -15,17 +15,46 @@ namespace Apollon.WPF.ViewModels public OverviewListingViewModel OverviewListingViewModel { get; } public OverviewDetailsViewModel OverviewDetailsViewModel{ get; } + private bool _isLoading; + public bool IsLoading + { + get + { + return IsLoading; + } + set + { + _isLoading = value; + OnPropertyChanged(nameof(IsLoading)); + } + } + public ICommand AddTournamentCommand { get; } + public ICommand LoadTournamentsCommand { get; } public ICommand NavigateNavBarCommand { get; } - public OverviewViewModel(TournamentsStore tournamentStore, SelectedTournamentsStore selectedTournamentStore, ModalNavigationStore modalNavigationStore, NavigationStore navigationStore) + public OverviewViewModel(TournamentsStore tournamentStore, SelectedTournamentsStore selectedTournamentStore, + ModalNavigationStore modalNavigationStore, NavigationStore navigationStore) { - OverviewListingViewModel = OverviewListingViewModel.LoadViewModel(selectedTournamentStore, modalNavigationStore, tournamentStore); + OverviewListingViewModel = new OverviewListingViewModel(selectedTournamentStore, modalNavigationStore, tournamentStore); OverviewDetailsViewModel = new OverviewDetailsViewModel(selectedTournamentStore); + LoadTournamentsCommand = new LoadTournamentsCommand(this, tournamentStore); AddTournamentCommand = new OpenAddTournamentCommand(tournamentStore, modalNavigationStore); NavigateNavBarCommand = new NavigatCommand(navigationStore, () => new NavBarViewModel(navigationStore)); } + + public static OverviewViewModel LoadViewModel(SelectedTournamentsStore selectedTournamentStore, + ModalNavigationStore modalNavigationStore, + TournamentsStore tournamentStore, + NavigationStore navigationStore) + { + OverviewViewModel viewModel = new OverviewViewModel(tournamentStore, selectedTournamentStore, modalNavigationStore, navigationStore); + + viewModel.LoadTournamentsCommand.Execute(null); + + return viewModel; + } } }