WPF MVVM:ViewModels如何相互通信?

时间:2011-02-03 22:56:16

标签: wpf mvvm viewmodel

我有一个View,它有2个子视图,ViewModel分配给每个视图:

ViewA - ViewModelA
{ 
   ViewB - ViewModelB
   ViewC - ViewModelC
}

ViewB有一个文本框,ViewC有一个组合框,我需要从ViewModelA访问这两个组合框。不是GUI控件本身,而是绑定值,即文本框的.Text和ComboBox的.SelectedItem。目前我只将ViewModelB和ViewModelC作为ViewModelA的属性,但感觉不对。

视图模型在不破坏MVVM模式的情况下相互通信的标准方法是什么?

2 个答案:

答案 0 :(得分:12)

将断开连接的ViewModel相互通信的一种方法是使用发布/订阅机制,例如PRISM s EventAggregator。但是,在父/子ViewModel关系中,我认为父母可以直接了解和控制子ViewModel。

就我个人而言,我不认为从其他ViewModel中构造ViewModel是一种不好的做法。我一直这样做。我的ViewModels中有I generally favor composition over inheritance

答案 1 :(得分:3)

ViewModels通常从模型“继承”关系。在有意义的情况下添加关系并没有错。

ViewModel具有引用另一个ViewModel的属性是完全可以的。