一、传统事件与命令:
举例:一个应用程序有两种方式执行PrintDocument()方法;1、通过按钮;2、通过快捷键(B);
传统事件情况下,会为按钮事件和快捷键方式都创建两个事件(虽然使用的是同一个PrintDocument()方法),同时还要考虑快捷键是否会需要使用进行判断(原因是按钮的启用状态和快捷键启用状态并不是同步的);
命令情况下,主要增加了两个特性:1、将事件委托到适当的命令;2、使控件的启用状态和相应命令的状态保持同步;
二、命令的4个重要元素
1、命令;2、命令绑定;3、命令源;4、命令目标;
三、命令的核心是System.Window.Input.ICommand接口,该接口定义了命令的工作原理。
public interface ICommand
{
void Execute(object parameter);//最终触发一个在应用程序其他地方处理的事件;
bool CanExecute(object parameter);//返回命令的状态,可用返回true;不可用返回false;
event EventHandler CanExecuteChanged;//当命令状态改变时,引发该事件
//注意:命令可用,命令源可用;命令不可用,命令源也不可用;
}
四、RoutedCommand类
System.WIndows.Input.RoutedCommand类是WPF中唯一实现了ICommand接口的类;换句话说WPF命令都是该类的实例;
WPF命令模型的一种重要概念是,RoutedCommand类不包含任何应用程序逻辑。它只是代表一个命令,这意味着各个RoutedCommand对象具有相同的功能;
为了支持路由事件,该类实现了ICommand接口,并且添加了ICommand接口方法的一些不同的版本。最明显的变化是Execute()和CanExcute()使用了一个额外参数;
public void Execute(object parameter, IInputElement target);
public bool CanExecute(object parameter, IInputElement target);
参数target是开始处理事件的元素,事件从target元素开始,然后冒泡至高层的容器,直到处理事件;
五、RoutedUICommand类
RoutedUICommand类继承自RoutedCommand类,该类用于具有文本的命令,这些文本显示在用户界面中的某些地方,该类只增加了一个属性Text;优点是文本可以本地化;
六、命令为解决的问题:1、命令跟踪;2、“可撤销的命令”;3、具有状态并且可处于不同模式的命令;