Chr*_*ain 5 dependency-injection inversion-of-control mvvm viewmodel eventaggregator
鉴于以下场景:
Is it bad to simply inject ViewModelA into ViewModelB via constructor injection and just set the property directly?
Or…
Should a messaging system like the EventAggregator from Prism be used to handle all communication between ViewModels?
I like the injection approach because it’s easy, but my instincts are telling me I’m missing something. I call on your collective wisdom to help fill in my blind spot.
我建议您阅读这个问题(和我的答案),因为它很相似,但不完全是您的问题。它确实处理父/子 ViewModel 对象之间的属性通信。
让我们看一个基本的例子:
ViewModelA是父级并且必须提供 B 上某些财产的总和ViewModelB是孩子并且有一个需要求和的属性因此,用户请求编辑 B 上的属性,并且请求成功,因此 B 可能会更改其属性的值并触发事件PropertyChanged。
ViewModelA可以订阅所有孩子的活动,但沿着这条路走下去,我不喜欢它。添加和删除子项时,您需要做大量簿记工作。
将 A 注入 B 更干净,但您仍然需要做很多簿记工作。如果你对A采取“清除儿童”行动怎么办?在任何情况下,你都必须记住正确地摆脱 B 与 A 的亲子关系。在我看来,它仍然比事件更好,因为它更明确。
我个人喜欢消息传递的想法。我比 Prism 更熟悉 MVVM Light 的信使,但它们的想法是一样的……全局消息总线。任何时候,任何B都可以说“我改变了我的财产!” 然后 A 监听通知并自行进行计算。我认为这是最干净的解决方案,记账工作要少得多。
| 归档时间: |
|
| 查看次数: |
8244 次 |
| 最近记录: |