我最近需要将更高的视图模型(绑定到自定义选项卡内容控件)中的值与主机视图中要使用的CanExecute委托的基础值(绑定到主机视图)同步。基础模型具有顶层实例,其中包括。
我唯一想到的就是知道值何时变高,就是订阅PropertyChanged事件。但是,考虑到所有其他属性将触发该事件的次数,这似乎过多。它对MVVM也不合适(但我可能错了)。
现在,我在管理器类中的一个中心方法中设置了所有内容,其中魔术恰好确保值匹配:
If setDealable Then multilegViewModel.IsDealable = isDealable
multilegViewModel.IsIndicative = (Not isDealable)
' [...]
tktViewModel.IsCommandOtherEnabled = (Not isDealable)
tktViewModel.IsCommandBuyEnabled = multilegViewModel.IsBuyButtonEnabled
tktViewModel.IsCommandSellEnabled = multilegViewModel.IsSellButtonEnabled
tktViewModel.IsDealable = isDealable
tktViewModel.IsIndicative = (Not isDealable)
' [...]
但是,较小的“multilegViewModel”属性集正在其他地方设置,所以我必须找到它们并添加副本。风险在于让另一位开发人员在某处留下这样的配对。
那么,除了一个视图模型订阅另一个视图模型以外,是否还有其他想法确保值始终设置?
注意:双语标签是故意的。这是一个混合语言解决方案,例如管理器是VB.NET,但模型是C#,所以我接受任何一个中的建议。
更新:我改变了我的方法并大大简化了它,所以我最初需要它的原因不再有效。但是,我可能还有一两个可以从中受益的优势案例。