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时,所有注册的命令都会触发。

相关推荐
SEO-狼术1 天前
DevExpress WPF Crack, DevExpress WPF v25.1
wpf
小老鼠爱大米1 天前
C# WPF - Prism 学习篇:搭建项目(一)
c#·wpf·prism
博睿谷IT99_1 天前
Hadoop 分布式存储与计算框架详解
wpf
qq_392397123 天前
Redis常用操作
数据库·redis·wpf
三千道应用题3 天前
WPF学习笔记(25)MVVM框架与项目实例
wpf
厦门德仔3 天前
【WPF】WPF(样式)
android·java·wpf
三千道应用题4 天前
WPF学习笔记(16)树控件TreeView与数据模板
wpf
✎ ﹏梦醒͜ღ҉繁华落℘4 天前
WPF学习(四)
学习·wpf
zzyzxb4 天前
WPF中依赖属性和附加属性
wpf
难搞靓仔4 天前
WPF 右键菜单 MenuItem 绑定图片时只显示最后一个 Icon
wpf