一、概述
命令是对应用程序中特定功能的概括总结。特定功能可以是新建、打开、关闭、保存、复制、黏贴、打印等等。命令一旦创建就可通过多种方式去触发执行,如菜单、上下文菜单、工具栏、快捷键等等。
二、命令模型
命令模型主要由以下4部分组成:
- 命令:表示应用程序特定功能。它不包含执行任务的代码。
- 命令源:触发命令的元素。
- 命令目标:命令要应用的元素。
- 命令绑定:将上面三部分关联在一起,使命令能够被执行。
ICommand接口
WPF命名模型的核心就是ICommand接口,该接口定义了命令的工作原理。主要包含两个方法和一个事件:
public interface ICommand
{
event EventHandler CanExecuteChanged;
bool CanExecute(object parameter);
void Execute(object parameter);
}
Execute()方法包含具体执行的方法逻辑代码。
CanExecute()方法返回命令的状态。如果命令可用,则返回true;如果不可用,就返回false。
CanExecuteChanged事件,当命令状态改变时引发该事件。对于使用命令的任何控件,这是指示信号,表示它们应当调用CanExecute()方法检查命令的状态。通过使用该事件,当命令可用时,命令源(如Button)可自动启用自身;当命令不可用时,禁用自身。
RoutedCommand类
RoutedCommand类是WPF中唯一实现了ICommand接口的的类。当自己创建命令时,一般不会直接实现ICommand接口,而是使用RoutedCommand类。
RoutedUICommand类
RoutedUICommand类继承自RoutedCommand类,它只是增加了Text属性,该属性是为命令显示的文本。如果不在用户界面的任何地方显示命令文本,那么RoutedUICommand类和RoutedCommand类是等效的。
三、命令库
为了减少创建这些命令所需的工作,WPF提供了基本命令库,主要是通过以下5个专门的静态类的静态属性提供:
- ApplicationCommands:通用命令,如剪切板命令(Copy、Cut等),文档命令(如New、Open等)
- NavigationCommands:导航命令
- EditingCommands:文档编辑命令
- ComponentCommands:用户界面组件命令,包括用于移动和选择内容的命令
- MediaCommands:用于多媒体的命令(Play、Pause、NextTrack等)