diff --git a/Wabbajack/View Models/BackNavigatingVM.cs b/Wabbajack/View Models/BackNavigatingVM.cs new file mode 100644 index 00000000..4cef6cd5 --- /dev/null +++ b/Wabbajack/View Models/BackNavigatingVM.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reactive.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Input; +using ReactiveUI; +using ReactiveUI.Fody.Helpers; +using Wabbajack.Common; +using Wabbajack.Lib; + +namespace Wabbajack +{ + public class BackNavigatingVM : ViewModel + { + [Reactive] + public ViewModel NavigateBackTarget { get; set; } + public ICommand BackCommand { get; } + + public BackNavigatingVM(MainWindowVM mainWindowVM) + { + BackCommand = ReactiveCommand.Create( + execute: () => Utils.CatchAndLog(() => mainWindowVM.ActivePane = NavigateBackTarget), + canExecute: this.WhenAny(x => x.NavigateBackTarget) + .Select(x => x != null) + .ObserveOnGuiThread()); + } + } +} diff --git a/Wabbajack/View Models/LoginManagerVM.cs b/Wabbajack/View Models/LoginManagerVM.cs index 7c37cbf3..f157bd14 100644 --- a/Wabbajack/View Models/LoginManagerVM.cs +++ b/Wabbajack/View Models/LoginManagerVM.cs @@ -5,20 +5,19 @@ using System.Text; using System.Threading.Tasks; using System.Windows.Input; using ReactiveUI; +using ReactiveUI.Fody.Helpers; using Wabbajack.Lib; using Wabbajack.Lib.Downloaders; namespace Wabbajack { - public class LoginManagerVM : ViewModel + public class LoginManagerVM : BackNavigatingVM { - private MainWindowVM mainWindowVM; - public ICommand BackCommand { get; } public List Downloaders { get; } public LoginManagerVM(MainWindowVM mainWindowVM) + : base(mainWindowVM) { - BackCommand = ReactiveCommand.Create(() => mainWindowVM.NavigateBack()); Downloaders = DownloadDispatcher.Downloaders.OfType().ToList(); } } diff --git a/Wabbajack/View Models/MainWindowVM.cs b/Wabbajack/View Models/MainWindowVM.cs index f7fded99..52142f09 100644 --- a/Wabbajack/View Models/MainWindowVM.cs +++ b/Wabbajack/View Models/MainWindowVM.cs @@ -1,4 +1,4 @@ -using DynamicData; +using DynamicData; using DynamicData.Binding; using ReactiveUI; using ReactiveUI.Fody.Helpers; @@ -40,8 +40,6 @@ namespace Wabbajack public readonly UserInterventionHandlers UserInterventionHandlers; public readonly LoginManagerVM LoginManagerVM; - public readonly List NavigationTrail = new List(); - public ICommand CopyVersionCommand { get; } public ICommand ShowLoginManagerVM { get; } @@ -150,16 +148,14 @@ namespace Wabbajack installer.ModListLocation.TargetPath = path; } - public void NavigateBack() - { - var prev = NavigationTrail.Last(); - NavigationTrail.RemoveAt(NavigationTrail.Count - 1); - ActivePane = prev; - } - public void NavigateTo(ViewModel vm) { - NavigationTrail.Add(ActivePane); + ActivePane = vm; + } + + public void NavigateTo(BackNavigatingVM vm) + { + vm.NavigateBackTarget = ActivePane; ActivePane = vm; } diff --git a/Wabbajack/Wabbajack.csproj b/Wabbajack/Wabbajack.csproj index 510f112a..9f0ab68b 100644 --- a/Wabbajack/Wabbajack.csproj +++ b/Wabbajack/Wabbajack.csproj @@ -172,6 +172,7 @@ MSBuild:Compile Designer + AttentionBorder.xaml