我遇到了以下情况:
我有2个视图模型和一个视图,其中包含视图模型将绑定到的2个用户控件。第一个VM是搜索功能,它返回人员列表,第二个VM是每个人的更详细描述。
我想做以下事情:
public CompositeVM
{
public SearchVM SearchViewModel{get;set;}
public DescriptionVM DescriptionViewModel{get;set;}
}
正如我所说,搜索视图模型还包含一个已找到的人员列表,所以我希望当我选择一个人时,相应地更新DescriptionVM。
如何在VM之间实现这种类型的通信?我应该在SearchVM上设置SelectedPerson属性,并在所选列表项更改时将其传递给DescriptionVM(与我的耦合度非常高)?有没有更简单的方法解决这个问题?
答案 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