Prism框架中的DelagateCommand

背景

  在很多时候在WPF中我们都会使用到ICommand接口来定义我们的命令,然后将这个命令绑定到前台的控件比如Button上面,这个是一个很常规的操作,在后台的ViewModel中我们通常会使用一个实现了ICommand接口的DelegateCommand类来实例化我们定义的ICommand命令,我们这片文章来重点分析一下Prism中这个DelegateCommand会写出什么不同的东西。

常规实现

在看常规的实现之前我们首先来看看ICommand这个接口中到底定义了一些什么东西?

namespace System.Windows.Input
{
    //
    // 摘要:
    //     Defines a command.
    public interface ICommand
    {
        //
        // 摘要:
        //     Occurs when changes occur that affect whether or not the command should execute.
        event EventHandler CanExecuteChanged;

        //
        // 摘要:
        //     Defines the method that determines whether the command can execute in its current
        //     state.
        //
        // 参数:
        //   parameter:
        //     Data used by the command. If the command does not require data to be passed,
        //     this object can be set to null.
        //
        // 返回结果:
        //     true if this command can be executed; otherwise, false.
        bool CanExecute(object parameter);
        //
        // 摘要:
        //     Defines the method to be called when the command is invoked.
        //
        // 参数:
        //   parameter:
        //     Data used by the command. If the command does not require data to be passed,
        //     this object can be set to null.
        void Execute(object parameter);
    }
}

  这个接口是定义在System.Windows.Input命令空间下面的,主要包括两个方法和一个事件,我们的继承类就是要实现这个接口中的这些方法和事件

/// <summary>
   /// 实现DelegateCommand
   /// </summary>
 internal  class DelegateCommand : ICommand
   {
       /// <summary>
       /// 命令所需执行的事件
       /// </summary>
       public Action<object> ExecuteCommand { get; set; }
       /// <summary>
       /// 命令是否可用所执行的事件
       /// </summary>
       public Func<object, bool> CanExecuteCommand { get; set; }
      
 
       public DelegateCommand(Action<object> execute, Func<object, bool> canexecute)
       {
           ExecuteCommand = execute;
           CanExecuteCommand = canexecute;
       }
 
       /// <summary>
       /// 命令可用性获取
       /// </summary>
       /// <param name="parameter"></param>
       /// <returns></returns>
       public bool CanExecute(object parameter)
       {
           return CanExecuteCommand(parameter);
       }
 
       public event EventHandler CanExecuteChanged
       {
           add { CommandManager.RequerySuggested += value; }
           remove { CommandManager.RequerySuggested -= value; }
       }
 
       /// <summary>
       /// 命令具体执行
       /// </summary>
       /// <param name="parameter"></param>
       public void Execute(object parameter)
       {
           ExecuteCommand(parameter);
       }
   }

  

上一篇:​80%数据统计图都可以用一个软件搞定


下一篇:RPA之家手把手带你入门Blue Prism教程系列3_如何新建用户和配置数据库