命令模型的主要元素:

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:该类提供了一组用于处理多媒体的命令。