WPF Prism框架 Composite Commands 复合命令

目的

复合命令可以触发多个与之注册的命令,可以实现一次执行多个命令。可以实现类似全部保存这种业务需求。

实现

1、创建ICompositeCommands接口和CompositeCommands实现类

将Prism中提供的CompositeCommand对象进行包装,包装为ICompositeCommands接口和ApplicationCommands实现类

csharp 复制代码
 public interface IApplicationCommands
    {
        CompositeCommand SaveCommand { get; }
    }

    public class ApplicationCommands : IApplicationCommands
    {
        private CompositeCommand _saveCommand = new CompositeCommand();
        public CompositeCommand SaveCommand
        {
            get { return _saveCommand; }
        }
    }

2、IOC中注册复合命令

在App.xaml后台代码中进行IOC注册

csharp 复制代码
 protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
   containerRegistry.RegisterSingleton<IApplicationCommands, ApplicationCommands>();
}

3、ViewModel中定义复合命令

在ViewModel中定义复合命令,并将该命令绑定到View层

ViewModel:

csharp 复制代码
  private IApplicationCommands _applicationCommands;
        public IApplicationCommands ApplicationCommands
        {
            get { return _applicationCommands; }
            set { SetProperty(ref _applicationCommands, value); }
        }

        public MainWindowViewModel(IApplicationCommands applicationCommands)
        {
            ApplicationCommands = applicationCommands;
        }

View:

csharp 复制代码
 <Button Content="Save" Margin="10" Command="{Binding ApplicationCommands.SaveCommand}"/>

4、将其他多个地方的Command注册该复合命令

csharp 复制代码
 public TabViewModel(IApplicationCommands applicationCommands)
  {
    _applicationCommands = applicationCommands;

    UpdateCommand = new DelegateCommand(Update).ObservesCanExecute(() => CanUpdate);

    _applicationCommands.SaveCommand.RegisterCommand(UpdateCommand);
}
 
private void Update()
{
  UpdateText = $"Updated: {DateTime.Now}";
}

这样当触发复合命令 ApplicationCommands.SaveCommand时,所有注册的命令都会触发。

相关推荐
Macbethad1 天前
使用WPF编写一个读取串口的程序
wpf
Macbethad2 天前
如何用WPF做工控设置界面
java·开发语言·wpf
csdn_aspnet2 天前
WPF 做一个简单的电子签名板(一)
c#·wpf
玖笙&2 天前
✨WPF编程进阶【7.2】:动画类型(附源码)
c++·c#·wpf·visual studio
·心猿意码·3 天前
WPF中TemplatePart机制详解
wpf
FuckPatience4 天前
WPF 使用UserControl / ContentControl显示子界面
wpf
wangnaisheng4 天前
【WPF】WrapPanel的用法
wpf
源之缘-OFD先行者5 天前
10 万雷达点迹零卡顿回放:WPF + Vortice.Direct2D 多线程渲染实战
wpf
猫林老师5 天前
Flutter for HarmonyOS开发指南(九):测试、调试与质量保障体系
flutter·wpf·harmonyos
LateFrames5 天前
做【秒开】的程序:WPF / WinForm / WinUI3 / Electron
electron·c#·wpf·winform·winui3·claude code