diff --git a/SpineViewer/ViewModels/MainWindow/SpineObjectListViewModel.cs b/SpineViewer/ViewModels/MainWindow/SpineObjectListViewModel.cs index eafdbe9..b17bcda 100644 --- a/SpineViewer/ViewModels/MainWindow/SpineObjectListViewModel.cs +++ b/SpineViewer/ViewModels/MainWindow/SpineObjectListViewModel.cs @@ -11,6 +11,7 @@ using SpineViewer.ViewModels.Exporters; using System; using System.Collections; using System.Collections.Generic; +using System.Collections.Specialized; using System.IO; using System.Linq; using System.Text; @@ -45,6 +46,11 @@ namespace SpineViewer.ViewModels.MainWindow _customFFmpegExporterViewModel = new(_vmMain); } + /// + /// 请求选中项发生变化 + /// + public event NotifyCollectionChangedEventHandler? RequestSelectionChanging; + /// /// 单帧导出 ViewModel /// @@ -489,6 +495,19 @@ namespace SpineViewer.ViewModels.MainWindow { var sp = new SpineObjectModel(skelPath, atlasPath); lock (_spineObjectModels.Lock) _spineObjectModels.Add(sp); + if (Application.Current.Dispatcher.CheckAccess()) + { + RequestSelectionChanging?.Invoke(this, new(NotifyCollectionChangedAction.Reset)); + RequestSelectionChanging?.Invoke(this, new(NotifyCollectionChangedAction.Add, sp)); + } + else + { + Application.Current.Dispatcher.Invoke(() => + { + RequestSelectionChanging?.Invoke(this, new(NotifyCollectionChangedAction.Reset)); + RequestSelectionChanging?.Invoke(this, new(NotifyCollectionChangedAction.Add, sp)); + }); + } return true; } catch (Exception ex) @@ -505,6 +524,19 @@ namespace SpineViewer.ViewModels.MainWindow { var sp = new SpineObjectModel(cfg); lock (_spineObjectModels.Lock) _spineObjectModels.Add(sp); + if (Application.Current.Dispatcher.CheckAccess()) + { + RequestSelectionChanging?.Invoke(this, new(NotifyCollectionChangedAction.Reset)); + RequestSelectionChanging?.Invoke(this, new(NotifyCollectionChangedAction.Add, sp)); + } + else + { + Application.Current.Dispatcher.Invoke(() => + { + RequestSelectionChanging?.Invoke(this, new(NotifyCollectionChangedAction.Reset)); + RequestSelectionChanging?.Invoke(this, new(NotifyCollectionChangedAction.Add, sp)); + }); + } return true; } catch (Exception ex) diff --git a/SpineViewer/Views/MainWindow.xaml.cs b/SpineViewer/Views/MainWindow.xaml.cs index 85bfa9c..f775e7b 100644 --- a/SpineViewer/Views/MainWindow.xaml.cs +++ b/SpineViewer/Views/MainWindow.xaml.cs @@ -30,7 +30,7 @@ namespace SpineViewer.Views; public partial class MainWindow : Window { /// - /// 布局文件保存路径 + /// 上一次状态文件保存路径 /// public static readonly string LastStateFilePath = Path.Combine(Path.GetDirectoryName(Environment.ProcessPath), "laststate.json"); @@ -46,8 +46,8 @@ public partial class MainWindow : Window InitializeLogConfiguration(); _vm = new (_renderPanel); DataContext = _vm; + _vm.SpineObjectListViewModel.RequestSelectionChanging += SpinesListView_RequestSelectionChanging; _vm.SFMLRendererViewModel.RequestSelectionChanging += SpinesListView_RequestSelectionChanging; - Loaded += MainWindow_Loaded; Closed += MainWindow_Closed; }