diff --git a/XplorePlane/Events/AddOperatorRequestedEvent.cs b/XplorePlane/Events/AddOperatorRequestedEvent.cs new file mode 100644 index 0000000..7643779 --- /dev/null +++ b/XplorePlane/Events/AddOperatorRequestedEvent.cs @@ -0,0 +1,11 @@ +using Prism.Events; + +namespace XplorePlane.Events +{ + /// + /// 请求向当前流水线追加算子的事件,由算子工具箱发布,PipelineEditorViewModel 订阅 + /// + public sealed class AddOperatorRequestedEvent : PubSubEvent + { + } +} diff --git a/XplorePlane/ViewModels/ImageProcessing/OperatorToolboxViewModel.cs b/XplorePlane/ViewModels/ImageProcessing/OperatorToolboxViewModel.cs index b704c3f..027f803 100644 --- a/XplorePlane/ViewModels/ImageProcessing/OperatorToolboxViewModel.cs +++ b/XplorePlane/ViewModels/ImageProcessing/OperatorToolboxViewModel.cs @@ -1,8 +1,11 @@ +using Prism.Commands; +using Prism.Events; using Prism.Mvvm; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; +using XplorePlane.Events; using XplorePlane.Services; namespace XplorePlane.ViewModels @@ -35,17 +38,20 @@ namespace XplorePlane.ViewModels public class OperatorToolboxViewModel : BindableBase { private readonly IImageProcessingService _imageProcessingService; + private readonly IEventAggregator _eventAggregator; private string _searchText = string.Empty; private OperatorGroupViewModel _selectedGroup; // UI 元数据(分类 + 图标)由 ProcessorUiMetadata 统一提供,保持工具箱与流水线图标一致 - public OperatorToolboxViewModel(IImageProcessingService imageProcessingService) + public OperatorToolboxViewModel(IImageProcessingService imageProcessingService, IEventAggregator eventAggregator) { _imageProcessingService = imageProcessingService ?? throw new ArgumentNullException(nameof(imageProcessingService)); + _eventAggregator = eventAggregator ?? throw new ArgumentNullException(nameof(eventAggregator)); AvailableOperators = new ObservableCollection(); FilteredOperators = new ObservableCollection(); FilteredGroups = new ObservableCollection(); + AddOperatorCommand = new DelegateCommand(AddOperator); LoadOperators(); } @@ -53,6 +59,8 @@ namespace XplorePlane.ViewModels public ObservableCollection FilteredOperators { get; } public ObservableCollection FilteredGroups { get; } + public DelegateCommand AddOperatorCommand { get; } + public OperatorGroupViewModel SelectedGroup { get => _selectedGroup; @@ -124,5 +132,11 @@ namespace XplorePlane.ViewModels "检测分析" => 6, _ => 99 }; + + private void AddOperator(string operatorKey) + { + if (!string.IsNullOrWhiteSpace(operatorKey)) + _eventAggregator.GetEvent().Publish(operatorKey); + } } } diff --git a/XplorePlane/ViewModels/ImageProcessing/PipelineEditorViewModel.cs b/XplorePlane/ViewModels/ImageProcessing/PipelineEditorViewModel.cs index 2494bfd..f0233c0 100644 --- a/XplorePlane/ViewModels/ImageProcessing/PipelineEditorViewModel.cs +++ b/XplorePlane/ViewModels/ImageProcessing/PipelineEditorViewModel.cs @@ -83,6 +83,9 @@ namespace XplorePlane.ViewModels _eventAggregator.GetEvent() .Subscribe(OnManualImageLoaded); + + _eventAggregator.GetEvent() + .Subscribe(key => { if (CanAddOperator(key)) AddOperator(key); }); } // ── State Properties ────────────────────────────────────────── diff --git a/XplorePlane/Views/ImageProcessing/OperatorToolboxView.xaml b/XplorePlane/Views/ImageProcessing/OperatorToolboxView.xaml index 9c5ff9d..fc69075 100644 --- a/XplorePlane/Views/ImageProcessing/OperatorToolboxView.xaml +++ b/XplorePlane/Views/ImageProcessing/OperatorToolboxView.xaml @@ -135,28 +135,77 @@ - - - - - - - + + + + + + + + + + + + + - + +