WPF/Silverlight中的Command
来源:互联网 发布:three.js 顶点数 编辑:程序博客网 时间:2024/05/29 18:14
这里所讨论的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
- WPF/Silverlight中的Command
- WPF/Silverlight中的Command
- Silverlight/WPF中的布局
- WPF中的Command
- WPF中的Command命令
- Silverlight中的Command,自定义简单Command
- WPF/Silverlight中的RichTextBox总结
- WPF中的命令(Command)
- WPF,Silverlight 中的 xmlns,xmlns:x
- WPF/Silverlight中的数据绑定问题
- wpf SilverLight 中的画刷 brush
- WPF 参照WPF实现Silverlight中的多值绑定特性
- silverlight wpf
- WPF+silverlight
- wpf command
- WPF command
- Mvvm Light Toolkit for wpf/silverlight系列之Command和Events
- Mvvm Light Toolkit for wpf/silverlight系列之Command和Events
- 实例解析:设计一个完全可扩展的应用
- JavaScript定义类的几种方式
- 关于使用showModalDialog传递参数出现中文乱码问题
- vim tips
- Oracle学习笔记八:安全管理
- WPF/Silverlight中的Command
- 呃,好晚了
- SQL2005下字符串字段内的字符排序
- 我的Emacs配置存放
- 090117.成长日记
- 有点sexy的iPhone应用程序
- Flash P2P 通信技巧(AS-Java-AS)
- 用modbus协议,在S7-300中实现与PC,以及英杰电机调速器三点通讯
- ORA-28000: the account is locked(通过plsql解决的方法)