WPF应用程序中的复合ViewModels

时间:2012-03-12 10:58:19

标签: c# wpf mvvm

我遇到了以下情况:

我有2个视图模型和一个视图,其中包含视图模型将绑定到的2个用户控件。第一个VM是搜索功能,它返回人员列表,第二个VM是每个人的更详细描述。

我想做以下事情:

public CompositeVM
{
     public SearchVM SearchViewModel{get;set;}
     public DescriptionVM DescriptionViewModel{get;set;}
}

正如我所说,搜索视图模型还包含一个已找到的人员列表,所以我希望当我选择一个人时,相应地更新DescriptionVM。

如何在VM之间实现这种类型的通信?我应该在SearchVM上设置SelectedPerson属性,并在所选列表项更改时将其传递给DescriptionVM(与我的耦合度非常高)?有没有更简单的方法解决这个问题?

2 个答案:

答案 0 :(得分:4)

CompositeVM可以订阅SearchViewModel的{​​{1}}个事件并设置PropertyChanged

DescriptionViewModel.SetSelectedPerson(SearchViewModel.SelectedPerson)SearchVM之间没有耦合,因为他们彼此不了解。 DescriptionVM知道他们俩,也是谁负责他们的互动。

答案 1 :(得分:1)

或者,您可以使用Mediator-Observer模式,例如MVVM Light中的Messenger类:

http://blog.galasoft.ch/archive/2009/09/27/mvvm-light-toolkit-messenger-v2-beta.aspx