命令模型的主要元素:
1、命令
2、命令绑定:命令连接到相关的应用程序逻辑
3、命令源:命令源触发命令,
4、命令目标:应用程序逻辑。
----------------------------------------------------------------
ICommand接口
命令模型的核心是System.Windows.Input.ICommand接口。
public interface ICommand { event EventHandler CanExecuteChanged; //当命令状态改变时,引发该事件。 bool CanExecute(object parameter); //此方法返回命令状态,如果命令可用则返回true,不可用则返回false。 void Execute(object parameter); //定义在调用此命令时要调用的方法。 }
该接口包含两个方法和一个事件:
void Execute(object parameter);
bool CanExecute(object parameter);
event EventHandler CanExecuteChanged;
Execute()方法包含应用程序任务逻辑。
CanExecute()方法返回命令的状态;如果命令可用,返回true;如果不可用,返回false。
命令状态改变时,引发CanExecuteChanged事件。对于使用命令的任何控件,这是指示信号,表示它们应当调用CanExecute()方法检查命令的状态。
--------------------------------------------------------------------------------------------------------
RoutedCommand类
创建自己的命令时,不会直接实现ICommand接口;而是使用System.Windows.input.RoutedCommand类,该类自动实现了ICommand接口。RoutedCommand类是WPF中唯一实现了ICommand接口的类。所有WPF命令都是RoutedCommand类及其派生类的实例。
RouteCommand类不包含任何应用程序逻辑,只代表命令,只含有命令本身的功能,所有RoutedCommand对象的功能相同。
RouteCommand类为事件冒泡和隧道添加了一些额外的基础结构。
RouteCommand类私有地实现了ICommand接口,并添加了ICommand接口方法的不同版本。
public void Execute(object parameter, IInputElement target){}
public bool CanExecute(object parameter, IInputElement target){}
RoutedCommand类还引入三个属性:命令名称(Name属性)、包含命令的类(OwnerType)以及触发命令的按键或鼠标操作。
--------------------------------------------------------------------------------------------------------------------------
RoutedUICommand类
RoutedUICommand类继承自RoutedCommand类(实际上WPF的所有预先构建的命令都是RoutedUICommand对象)。
RoutedUICommand类只增加了Text属性,该属性是为了显示命令的文本。按钮的文本可以使用命令的Text属性,相同命令显示相同的文本。
------------------------------------------------------------------------------------------------------------------
命令库
WPF通过5个静态类的静态属性提供:
1、ApplicationCommand:通用命令,剪切板命令(Copy、Cut、Paste),文档命令(New、Open、Save、Save As、Print)等。
2、NavigationCommand:导航命令,基于页面的应用程序设计的一些命令(BrowseBack、BrowseForward和NextPage)等。
3、EditingCommand:文档编辑命令,
4、ComponentCommands:该类提供了由用户界面组建使用的命令。
5、MediaCommands:该类提供了一组用于处理多媒体的命令。