我遇到以下情况:
我有2个 View 模型和一个 View ,其中包含2个用户控件,这些 View 模型将绑定(bind)到该用户控件。第一个VM是搜索功能,它返回人员列表,第二个VM是每个人的更详细说明。
我要执行以下操作:
public CompositeVM
{
public SearchVM SearchViewModel{get;set;}
public DescriptionVM DescriptionViewModel{get;set;}
}
就像我说过的那样,搜索 View 模型还包含一个找到的人员列表,因此我希望当我选择一个人员时,DescriptionVM将相应地进行更新。
如何在虚拟机之间实现这种通信?当所选列表项发生更改时(我耦合度很高),我是否应该在SearchVM上设置SelectedPerson属性并将其传递给DescriptionVM?有没有更简单的方法来解决这个问题?
最佳答案
CompositeVM
可以订阅SearchViewModel
的PropertyChanged
事件并设置DescriptionViewModel.SetSelectedPerson(SearchViewModel.SelectedPerson)
。SearchVM
和DescriptionVM
之间没有耦合,因为它们彼此之间不认识。 CompositeVM
既了解他们,又负责他们的交互。