• WPF/Silverlight中的Command


    这里所讨论的Command就是设计模式中的Command模式:命令(Command)模式属于对象的行为模式【GOF95】。命令模式又称为行动(Action)模式或交易(Transaction)模式。命令模式把一个请求或者操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。

    在我们日常的应用程序操作中,经常要处理各种各样的命令和进行相关的事件处理,比如需要复制、粘贴文本框中的内容;上网查看网页时,可能需要返回上一网页 查看相应内容;而当我们播放视频和多媒体时,我们可能要调节音量,快速拖动到我们想看的片段等等。在Winform编程中,我们经常使用各种各样的控件来 解决此类问题,当然我们也必须编写一堆代码来处理各种各样的命令和事件处理。那么,Windows Presentation Foundation (WPF)作为微软新一代图形图像支援系统,许多控件都自动集成了固有的命令集。比如文本框TextBox就提供了复制(Copy),粘贴(Paste),裁切(Cut),撤消(Undo)和重做(Redo)命令等。WPF提供常用应用程序所用的命令集,常用的命令集包括:ApplicationCommands, ComponentCommands, NavigationCommands, MediaCommands和EditingCommands。

    WPF为开发者省去了写一大堆的代码, 例如常用的Copy, Paste, Cut...等功能. 如果没有满足需求Command ,可以自己实现ICommand接口。该接口属于System.Windows.Input命名空间,在程序集PresentationCore.dll。内置的 WPF 命令类型为 RoutedCommand 和 RoutedUICommand,这些命令是否就满足你的要求了呢,事实上WPF的内置Command还有需要许多不足,因此在模式与实践团队的Prism项目中也打造一套自己的Command,特别是与UI元素耦合以及不支持命令组合,所以他们在Prism中便增加了另外一套Command:DelegateCommand和CompositeCommand。

          DelegateCommand:实现了WPF/Silverlight的ICommand接口,仍只支持一个CanExecute和Execute挂接,但其实现一个称为IActiveAware的接口用于指示是否处于集合状态,非激活状态的DelegateCommand始终得不到执行。
          CompositeCommand:也是WPF/Silverlight的ICommand接口的一个实现,但其同时也是DelegateCommand的组合,可以向其中注册或取消注册DelegateCommand,当其中所有处于激活状态的内置DelegateCommand都可以被执行时其CanExecute才返回true。

    参考资料

    了解 WPF 中的路由事件和命令: http://msdn.microsoft.com/zh-cn/magazine/cc785480.aspx

    [Prism]Composite Application Guidance for WPF(9)——命令: http://www.cnblogs.com/zhouyinhui/archive/2008/10/25/1319484.html

    欢迎大家扫描下面二维码成为我的客户,为你服务和上云

  • 相关阅读:
    Java / Android 基于Http的多线程下载的实现
    Java实现敏感词过滤
    java中途强制跳出递归
    Java 并发专题 : Executor详细介绍 打造基于Executor的Web服务器
    Android权限列表
    Java 并发专题 : CyclicBarrier 打造一个安全的门禁系统
    android 开发-系统设置界面的实现
    android 开发-数据存储之共享参数
    android 开发-(Contextual Menu)上下文菜单的实现
    android 开发-ListView与ScrollView事件冲突处理(事件分发机制处理)
  • 原文地址:https://www.cnblogs.com/shanyou/p/1377690.html
Copyright © 2020-2023  润新知