我的任务是编写用户控件以使用MVVM模式显示一些结果。
主要应用程序(称为ApplicationVM
)有两个属性UserControlViewModel
和SelectedRecord
。第一个属性包含UserControlViewModel
的实例。在XAML中,我使用这些属性将UserControl
绑定到UserControlViewModel
。 DependencyProperty PageCount
用于视图中的显示功能与UserControlViewModel
之间的简单通知。
<control:UserControl DataContext="{Binding UserControlViewModel}" PageCount="{Binding DocumentPageCount}" />
以下是ApplicationViewModel中第二个属性的实现。
public Record SelectedRecord
{
get
{
return m_SelectedRecord;
}
set
{
m_SelectedRecord = value;
OnPropertyChanged("SelectedRecord");
}
}
之后,这个属性将被替换。但我应该做的是在属性“SelectedRecord
”和“Record
”的“UserControlViewModel
”之间建立一个依赖关系,它调用一个函数来生成新内容(例如GenerateContent()
)。如何更改SelectedRecord
属性更新Record
UserControlViewModel
属性以生成新内容?或者我的UserControlViewModel
可以听到OnPropertyChanged("SelectedRecord")
自动生成新内容吗?
答案 0 :(得分:4)
我会使用信使 - 这样你的视图模型可以很好地解耦。
这是SO上谈论MVVM中的一个线程:
答案 1 :(得分:3)
一个简单的解决方案是更新SelectedRecord属性的setter。在这里,您可以在UserControlViewModel上调用GenerateContent方法,如果需要,还可以在那里设置SelectedRecord属性。
或者,您的UserControlViewModel可以侦听ApplicationVM上的PropertyChanged事件,但为此,UserControlViewModel需要对ApplicationVM的引用。
最后,您可以使用事件系统在视图模型之间进行通信。这将确保您的视图模型很好地分离,但价格会增加复杂性。如果您有兴趣,请查看Prism Event Aggregator上的文档。