diff --git a/SpineViewer/Models/UserStateModel.cs b/SpineViewer/Models/UserStateModel.cs index 25eedaa..8a0d73f 100644 --- a/SpineViewer/Models/UserStateModel.cs +++ b/SpineViewer/Models/UserStateModel.cs @@ -33,6 +33,12 @@ namespace SpineViewer.Models #endregion + #region 浏览页面状态 + + public string? ExploringDirectory { get; set; } + + #endregion + #region 预览画面状态 public uint ResolutionX { get; set; } = 1500; diff --git a/SpineViewer/Models/WorkspaceModel.cs b/SpineViewer/Models/WorkspaceModel.cs index 298514a..a608cbb 100644 --- a/SpineViewer/Models/WorkspaceModel.cs +++ b/SpineViewer/Models/WorkspaceModel.cs @@ -12,7 +12,6 @@ namespace SpineViewer.Models { public class WorkspaceModel { - public string? ExploringDirectory { get; set; } public RendererWorkspaceConfigModel RendererConfig { get; set; } = new(); public List LoadedSpineObjects { get; set; } = []; } diff --git a/SpineViewer/ViewModels/MainWindow/MainWindowViewModel.cs b/SpineViewer/ViewModels/MainWindow/MainWindowViewModel.cs index a658292..a1198c0 100644 --- a/SpineViewer/ViewModels/MainWindow/MainWindowViewModel.cs +++ b/SpineViewer/ViewModels/MainWindow/MainWindowViewModel.cs @@ -181,14 +181,12 @@ namespace SpineViewer.ViewModels.MainWindow { return new() { - ExploringDirectory = _explorerListViewModel.CurrentDirectory, RendererConfig = _sfmlRendererViewModel.WorkspaceConfig, LoadedSpineObjects = _spineObjectListViewModel.LoadedSpineObjects }; } set { - _explorerListViewModel.CurrentDirectory = value.ExploringDirectory; _sfmlRendererViewModel.WorkspaceConfig = value.RendererConfig; _spineObjectListViewModel.LoadedSpineObjects = value.LoadedSpineObjects; } diff --git a/SpineViewer/Views/MainWindow.xaml.cs b/SpineViewer/Views/MainWindow.xaml.cs index ce801e9..0fadd96 100644 --- a/SpineViewer/Views/MainWindow.xaml.cs +++ b/SpineViewer/Views/MainWindow.xaml.cs @@ -189,6 +189,7 @@ public partial class MainWindow : Window _userStateWatchers.Add(PropertyWatcher.Watch(_rightPanelGrid.RowDefinitions[0], RowDefinition.HeightProperty, DelayedSaveUserState)); _userStateWatchers.Add(PropertyWatcher.Watch(_rightPanelGrid.RowDefinitions[2], RowDefinition.HeightProperty, DelayedSaveUserState)); + _vm.ExplorerListViewModel.PropertyChanged += ExplorerListUserStateChanged; _vm.SFMLRendererViewModel.PropertyChanged += SFMLRendererUserStateChanged; } @@ -234,6 +235,7 @@ public partial class MainWindow : Window // 撤除所有状态监听器 _vm.SFMLRendererViewModel.PropertyChanged -= SFMLRendererUserStateChanged; + _vm.ExplorerListViewModel.PropertyChanged -= ExplorerListUserStateChanged; foreach (var w in _userStateWatchers) w.Dispose(); _userStateWatchers.Clear(); @@ -284,6 +286,8 @@ public partial class MainWindow : Window _rightPanelGrid.RowDefinitions[0].Height = new(m.RightPanelGridRow0Height, GridUnitType.Star); _rightPanelGrid.RowDefinitions[2].Height = new(m.RightPanelGridRow2Height, GridUnitType.Star); + _vm.ExplorerListViewModel.CurrentDirectory = m.ExploringDirectory; + _vm.SFMLRendererViewModel.SetResolution(m.ResolutionX, m.ResolutionY); _vm.SFMLRendererViewModel.MaxFps = m.MaxFps; _vm.SFMLRendererViewModel.Speed = m.Speed; @@ -317,6 +321,8 @@ public partial class MainWindow : Window RightPanelGridRow0Height = _rightPanelGrid.RowDefinitions[0].Height.Value, RightPanelGridRow2Height = _rightPanelGrid.RowDefinitions[2].Height.Value, + ExploringDirectory = _vm.ExplorerListViewModel.CurrentDirectory, + ResolutionX = _vm.SFMLRendererViewModel.ResolutionX, ResolutionY = _vm.SFMLRendererViewModel.ResolutionY, MaxFps = _vm.SFMLRendererViewModel.MaxFps, @@ -356,6 +362,18 @@ public partial class MainWindow : Window _saveUserStateTimer.Start(); } + private void ExplorerListUserStateChanged(object? sender, PropertyChangedEventArgs e) + { + switch (e.PropertyName) + { + case nameof(ExplorerListViewModel.CurrentDirectory): + DelayedSaveUserState(); + break; + default: + break; + } + } + private void SFMLRendererUserStateChanged(object? sender, PropertyChangedEventArgs e) { switch (e.PropertyName)