From 2f25a1e779f30554439d56b5cfc6ecc753ee64ab Mon Sep 17 00:00:00 2001 From: jbe2277 Date: Sun, 3 Dec 2023 11:01:16 +0100 Subject: [PATCH] NR fix update of selected navigation item - do not execute the command twice --- .../Controllers/AppController.cs | 9 ++--- .../ViewModels/ShellViewModel.cs | 35 +++++++++++-------- 2 files changed, 24 insertions(+), 20 deletions(-) diff --git a/src/NewsReader/NewsReader.Applications/Controllers/AppController.cs b/src/NewsReader/NewsReader.Applications/Controllers/AppController.cs index b507f087..5e665b04 100644 --- a/src/NewsReader/NewsReader.Applications/Controllers/AppController.cs +++ b/src/NewsReader/NewsReader.Applications/Controllers/AppController.cs @@ -84,18 +84,15 @@ private void ShellViewModelPropertyChanged(object? sender, PropertyChangedEventA { if (shellViewModel.CurrentPage is IAddEditFeedView) { - shellViewModel.SelectedFeed = null; - shellViewModel.SelectedFooterMenu = addFeedNavigationItem; + shellViewModel.SetSelectedFooterMenuCore(addFeedNavigationItem); } else if (shellViewModel.CurrentPage is ISettingsView) { - shellViewModel.SelectedFeed = null; - shellViewModel.SelectedFooterMenu = settingsNavigationItem; + shellViewModel.SetSelectedFooterMenuCore(settingsNavigationItem); } else if (shellViewModel.CurrentPage is IFeedView feedView) { - shellViewModel.SelectedFeed = ((FeedViewModel)feedView.BindingContext!).Feed; - shellViewModel.SelectedFooterMenu = null; + shellViewModel.SetSelectedFeedCore(((FeedViewModel)feedView.BindingContext!).Feed); } } } diff --git a/src/NewsReader/NewsReader.Applications/ViewModels/ShellViewModel.cs b/src/NewsReader/NewsReader.Applications/ViewModels/ShellViewModel.cs index d426d044..b007af8c 100644 --- a/src/NewsReader/NewsReader.Applications/ViewModels/ShellViewModel.cs +++ b/src/NewsReader/NewsReader.Applications/ViewModels/ShellViewModel.cs @@ -7,19 +7,16 @@ namespace Waf.NewsReader.Applications.ViewModels; -public class ShellViewModel : ViewModelCore, INavigationService +public class ShellViewModel(IShellView view, IAppInfoService appInfoService) : ViewModelCore(view, false), INavigationService { private NavigationItem? selectedFooterMenu; private ObservableList feeds = null!; private Feed? selectedFeed; private object? currentPage; + private bool suppressSelectedFooterMenuCommand; + private bool suppressSelectedFeedCommand; - public ShellViewModel(IShellView view, IAppInfoService appInfoService) : base(view, false) - { - AppName = appInfoService.AppName; - } - - public string AppName { get; } + public string AppName { get; } = appInfoService.AppName; public ICommand EditFeedCommand { get; internal set; } = null!; @@ -40,16 +37,12 @@ public NavigationItem? SelectedFooterMenu if (selectedFooterMenu is not null) { SelectedFeed = null; - selectedFooterMenu.Command?.Execute(null); + if (!suppressSelectedFooterMenuCommand) selectedFooterMenu.Command?.Execute(null); } } } - public ObservableList Feeds - { - get => feeds; - internal set => SetProperty(ref feeds, value); - } + public ObservableList Feeds { get => feeds; internal set => SetProperty(ref feeds, value); } public Feed? SelectedFeed { @@ -60,11 +53,25 @@ public Feed? SelectedFeed if (selectedFeed is not null) { SelectedFooterMenu = null; - ShowFeedViewCommand.Execute(selectedFeed); + if (!suppressSelectedFeedCommand) ShowFeedViewCommand.Execute(selectedFeed); } } } + public void SetSelectedFooterMenuCore(NavigationItem? value) + { + suppressSelectedFooterMenuCommand = true; + SelectedFooterMenu = value; + suppressSelectedFooterMenuCommand = false; + } + + public void SetSelectedFeedCore(Feed? value) + { + suppressSelectedFeedCommand = true; + SelectedFeed = value; + suppressSelectedFeedCommand = false; + } + public Task Navigate(IViewModelCore viewModel) { ViewCore.CloseFlyout();