【prism系列】CompositeCommand(复合命令) IActiveAware接口
转自:PRISM CompositeCommand(复合命令) IActiveAware接口 - 爱码网 (likecs.com)
CompositeCommand(复合命令)在父view级别通常会被用来协调命令在子view级别是如何调用的。在一些情况下,你想要所有的显示View的命令被执行,就像在前面的Save All命令。在另外一些情况下,你想要仅在活跃View的视图中的命令被执行。在这种情况下,复合命令将会执行在被认为是活跃的View中的命令;那些在非活跃View中的命令将不会被执行。例如,你可能在应用程序工具栏或者功能区实现一个缩放功能的命令,它只会使得当前活动的View进行缩放,如下图所示:
为了支持这种场景,Prism 提供了IActiveAware接口,IActiveAware接口定义了一个IsActive属性,当它的实现者出在活跃状态时返回true,定义了一个活跃状态发生变化时将会引发的IsActiveChanged事件。
你可以在子View或者ViewModel上实现IActiveAware接口。它主要用于在Region中跟踪子View的状态。一个View是否处于活动状态决定与区域适配器(Region Adaper),它负责指定Region控件中的Views。例如,就像前面展示的Tab控件,它就有一个区域适配器来设置当前选中的View处在Active状态。
DelegateCommand类也实现了IActiveAware接口。通过在构造方法中指定monitorCommandActivity参数为true来配置CompositeCommand以评估它的子DelegateCommands的活动状态(除CanExecute状态外)。这个参数被设置为true时,当确定CanExecute方法的返回值以及当执行子命令的Execute方法时,CompositeCommand类将会考虑每个子DelegateCommand的活动状态。
当monitorCommandActivity参数为true时,CompositeCommand类展现以下行为:
- CanExecute。只有当所有的活动的命令可以被执行时,才会返回true。那些非活动的子命令将不会被考虑。
- Execute。执行所有的活动的命令。非活动的命令将不会被考虑。
你可以利用这个功能来实现前面的例子。通过在你的子ViewModel中实现IActiveAware接口,在Region中的子View的变成活动或者非活动时你都会被通知。当子View的状态改变时,你可以更新子命令的状态。然后,当用户调用Zoom复合命令时,活动的子View的Zoom命令将会执行。
作者:宋桓公
出处:http://www.cnblogs.com/douzi2/
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义