C# WPF编程之命令模型详解
作者:SongYuLong的博客
概述
使用路由事件可以响应广泛的鼠标和键盘事件,这些事件是低级的元素。在实际应用程序中,功能被划分成一些高级的任务。这些任务可通过各种不同的动作和用户界面元素触发,包括主菜单、上下文菜单、键盘快捷键以及工具栏。
可在WPF中定义这些任务(也就是命令)并将控件连接到命令,从而不需要重复编写事件处理代码。更重要的是,当连接的命名不可用时,命令特性通过自动禁用控件来管理用户界面的状态。
将事件处理程序映射到事件:
将事件映射到命令:
WPF命令的缺点:
- 命令跟踪(例如,保留最近命令的历史记录);
- “可撤销的”命令;
- 具有状态并可处于不同“模式”的命令(例如,可被打开或关闭的命令);
WPF命令模型
WPF命令模型有许多可变的部分组成。他们都具有如下4个重要元素:
命令: 命令表示应用程序任务,并且跟踪任务是否能被执行。然然,命令实际上不包含执行应用程序任务的代码。
命令绑定: 每个命令绑定针对用户界面的具体区域,将命令连接到相关的应用程序逻辑。
命令源: 命令源触发命令。
命令目标: 命令目标是在其中执行命令的元素。
ICommand接口
WPF命令模型的核心是System.Windows.Input.ICommand接口,该接口定义了命令的工作原理。该接口包含两个方法和一个事件:
public interface ICommand { void Execute(object parameter); bool CanExecute(object parameter); event EventHandler CanExecuteChanged; }
- Execute()方法将包含应用程序任务逻辑(例如,打印文档)。
- CanExecute()方法返回命令的状态,如果命令可用,返回true,否则返回false。
- CanExecuteChanged():当命令状态变化时引发该事件。
注:Execute()和CanExecute()方法都接受一个附加的参数对象。
RoutedCommand类
当创建自己的命令时,不会直接实现ICommand接口,而是使用System.Windows.Input.RoutedCommand类,该类自动实现了ICommand接口。
RoutedCommand类是WPF中唯一实现了ICommand接口的类。
RoutedUICommand类
在程序中处理的大部分命令不是RoutedCommand对象,而是RoutedUICommand类的实例,RoutedUICommand类继承自RoutedCommand类。
RoutedUICommand类用于具有文本的命令,这些文本显示在用户界面中的某些地方(如,菜单项文本、工具栏按钮的工具提示)。RoutedUICommand类只增加了Text属性,该属性为命令显示的文本。
为命令定义命令文本的优点是可在某个位置执行本地化。
到此这篇关于C# WPF编程之命令模型详解的文章就介绍到这了,更多相关C# WPF命令模型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!