【prism系列】CompositeCommand(复合命令) IActiveAware接口

16 篇文章 17 订阅 ¥19.90 ¥99.00

转自: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命令将会执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值