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;
}