From 5f629f4854a99c5dfd6733076521ebf2f172976b Mon Sep 17 00:00:00 2001 From: Justin Swanson Date: Sat, 2 Nov 2019 17:21:05 -0500 Subject: [PATCH] Made lazy sub-VM members, so only one is ever created --- Wabbajack/View Models/MainWindowVM.cs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/Wabbajack/View Models/MainWindowVM.cs b/Wabbajack/View Models/MainWindowVM.cs index 0e08238e..81365b34 100644 --- a/Wabbajack/View Models/MainWindowVM.cs +++ b/Wabbajack/View Models/MainWindowVM.cs @@ -41,10 +41,15 @@ namespace Wabbajack private RunMode _Mode; public RunMode Mode { get => _Mode; set => this.RaiseAndSetIfChanged(ref _Mode, value); } + private readonly Lazy _Compiler; + private readonly Lazy _Installer; + public MainWindowVM(RunMode mode, string source, MainWindow mainWindow) { this.Mode = mode; this.MainWindow = mainWindow; + this._Installer = new Lazy(() => new InstallerVM(this)); + this._Compiler = new Lazy(() => new CompilerVM(this, source)); // Set up logging _logSubj @@ -60,16 +65,18 @@ namespace Wabbajack Utils.SetLoggerFn(s => _logSubj.OnNext(s)); Utils.SetStatusFn((msg, progress) => WorkQueue.Report(msg, progress)); - // Wire mode to drive the active pane + // Wire mode to drive the active pane. + // Note: This is currently made into a derivative property driven by mode, + // but it can be easily changed into a normal property that can be set from anywhere if needed this._ActivePane = this.WhenAny(x => x.Mode) .Select(m => { switch (m) { case RunMode.Compile: - return new CompilerVM(this, source); + return this._Compiler.Value; case RunMode.Install: - return new InstallerVM(this); + return this._Installer.Value; default: return default; }