WPF-命令

1. 简介

命令有许多可变的部分组成,但它们都具有以下4个重要元素:

  • 命令
    命令表示应用程序任务,并且跟踪任务是否能够被执行。
    然而,命令实际上不包含执行应用程序任务的代码。
  • 命令绑定
    每个命令绑定针对用户界面的具体元素,将命令连接到相关的应用程序逻辑。
    这种分解的设计是非常重要的,因为单个命令可用于应用程序中的多个地方,并且在每个地方具有不同的意义。
    为处理这一问题,需要将同一命令与不同的命令绑定。
  • 命令源
    命令源触发命令。
    例如,button就是命令源。
    单击它们都会执行绑定命令。
  • 命令目标
    命令目标是在其中执行命令的元素。

image-20210424153346796

2.如何实现一个命令

WPF命令的核心是System.Windows.Input.ICommand接口,该接口定义了命令的工作原理。
该接口包含两个方法和一个事件:

1
2
3
4
5
6
public interface ICommand
{
void Execute(object parameter);
bool CanExecute(object parameter);
event EventHandler CanExecuteChanged;
}
方法名 功能
Execute 将包含引用程序任务逻辑
CanExecute 返回命令的状态。可用为true,不可用为false;
CanExecuteChanged 当命令状态改变是引发该事件。对于使用命令的任何控件,这是指示信号,表示他们应当调用

Execute和CanExecute方法都接受一个附加的对象参数,可使用该对象传递所需的任何附加信息。

CanExecute方法检查命令的状态。
通过使用该事件,当命令可用时,命令源(如button)可自动启用自身;
当命令不可用时,禁用自身。

3. 如何让控件支持命令

支持命令的实现是在“命令源”这个环节实现ICommandSource。

ICommandSource接口定义了三个属性:

属性名 作用
Command 指向连接的命令,这是唯一必须的细节
CommandParameter 提供其他希望随命令发送的数据
CommandTarget 确定将在其中执行命令的元素

不是每个控件都直接支持command绑定的
需要将他们关联到实现了ICommandSource接口的控件
其中包括继承自ButtonBase类的控件(button和Checkbox等)