命令用途:
- 第一个用途是将语义以及调用命令的对象与执行命令的逻辑分离开来。 这使得多个完全不同的源可以调用相同的命令逻辑,并使得可以针对不同的目标对命令逻辑进行自定义。
-
命令的四个重要概念
命令
WPF 中的命令是通过实现 ICommand) 接口创建的。 ICommand) 公开两个方法(Execute) 及 CanExecute))和一个事件(CanExecuteChanged))。 Execute) 执行与命令关联的操作。CanExecute) 确定是否可以在当前命令目标上执行命令。 如果集中管理命令操作的命令管理器检测到命令源中发生了更改,此更改可能使得已引发但尚未由命令绑定执行的命令无效,则将引发 CanExecuteChanged)。
RoutedCommand 与RoutedEvent类似,没有相关的事件业务逻辑处理,只是引发相关的路由事件。沿元素树以隧道和冒泡形式传递,直到遇到具有 CommandBinding) 的对象。 CommandBinding) 包含这些事件的处理程序,执行此命令的就是这些处理程序。因此具体事件的处理是在CommandBinding中执行的。
命令源
调用命令的对象,如果Button,MenuItem,KeyGesuter等能触发鼠标点击事件,或键盘快捷的
- ICommandSource有三个公共属性
- Command) 是在调用命令源时执行的命令
- CommandParameter) 是用户定义的数据类型,用于将信息传递到实现命令的处理程序
CommandTarget) 是要在其上执行命令的对象,在RoutedCommand才会生效,可以改变RoutedEventArgs 中Source的源值
命令绑定:CommandBinding
它是真正执行命令的地方,通过PreviewExecuted)、Executed)、PreviewCanExecute) 和 CanExecute) 事件,执行相关逻辑
命令目标
命令目标是在其上执行命令的元素。 对于 RoutedCommand) 而言,命令目标是 Executed) 和 CanExecute) 的路由的起始元素
命令的理解
针对UI上的重复逻辑,使用同一个方法进行处理,
- 命令中包含CanExcute,Excute方法,通过这两个方法来进行实质的逻辑处理
- 系统预定义的命令大多数为单例命令
- 命令经常需要于CommandBinding一起使用
- 命令也支持冒泡或隧道事件
- 命令的相关类包括:ICommand,RoutedCommad,RoutedUICommand
MVVM框架中的命令