在之前学习了路由事件的相关内容,使用路由事件可以响应广泛的鼠标和键盘动作。但是,事件是非常低级的元素。在真是的应用程序中,功能被划分成一些高级的任务。这些任务可以通过各种不同的动作和用户界面元素触发。在WPF中可以定义这些任务,即所谓的命令,并将控件连接到命令,从而不需要重复编写事件处理代码。更重要的是,当连接的命令不可用时,命令特性通过自动禁用控件来管理用户界面的状态。命令模式还未存储命令的文本标题提供了一个中心位置。本次介绍如何使用在WPF中预先稿件的命令类,如果将他们连接到控件,以及如果定义自己的命令。

9.1 理解命令

  在设计良好的Windows应用程序中,应用程序逻辑不应位于事件处理程序中,而应当在更高层的方法中编写代码。这些方法中的每个方法都代表一个单独的应用程序“任务”。每个任务可能依赖其他库。使用这种设计最明显的方式是,在需要的地方添加事件处理程序,并使用各个事件处理程序调用恰当的应用程序方法。本质上,窗口代码变成了一个精简的交换台,并将请求转发到应用程序的核心。这种设计没有减少任何工作。许多应用程序任务可以通过各种不同的路由触发,所以经常需要编写多个事件处理程序来调用相同的应用程序方法。当需要处理用户界面的状态时,问题就变的更复杂了。WPF使用新的命令模式解决了这一问题。它增加了两个重要的特性:1、将事件委托到适当的命令。2、使控件的启用状态和相应命令的状态保持同步。WPF命令模型不像期望的那样直观。为了嵌入路由事件模型,需要几个单独的元素。虽然对于简化应用程序的设计来说,WPF命令系统是一个很好的工具,但是仍然有一些很重要的问题没有解决。WPF对一下方面没有提供任何支持:1、命令跟踪。2、“可撤销的”命令。3、具有状态并且可处于不同“模式”的命令(例如,可以被打开或关闭的命令)

9.2 WPF命令模型

  WPF命令模型;由许多可变的部分组成。总之,他们都具有如下4个重要元素:

  • 命令——命令表示一个应用程序任务,并且跟踪该任务是否能够被执行。但是命令实际上不包含执行应用程序任务的代码。
  • 命令绑定——每个命令绑定针对用户界面的具体区域,将命令连接到相关的应用程序逻辑。这种分解的设计是非常重要的,因为单个命令可以被用于应用程序中的多个地方,并且在每个地方具有不同的意义。为了处理这个问题,需要将同一命令与不同的命令绑定
  • 命令源——命令源触发命令。例如,MenuItem和Button都是命令源。单机它们都会执行绑定的命令。
  • 命令目标——命令目标是在其中执行命令的元素。例如,Paste命令可以在TextBox控件中插入文本,而OpenFile命令可以在DocumentViewer中打开一个文档。根据命令的本质,目标可能很重要,也可能不重要。

9.2.1 ICommand接口

  WPF命令模型的核心是System.Windows.Input.ICommand接口,该接口定义了命令的工作原理。该接口包含两个方法和一个事件:

    public interface ICommand
    {
        event EventHandler CanExecuteChanged;

        bool CanExecute(object parameter);

        void Execute(object parameter);
    }
View Code

相关文章:

  • 2021-10-10
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-17
  • 2022-03-04
猜你喜欢
  • 2021-07-04
  • 2021-09-10
  • 2021-08-15
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案