如何在我的ViewModel中侦听来自另一个ViewModel的更改
本文关键字:ViewModel 另一个 我的 | 更新日期: 2023-09-27 18:22:28
我的任务是编写一个用户控件,通过使用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
"answers"UserControlViewModel
"的"Record
"之间建立依赖关系,后者调用一个函数来生成新内容(例如GenerateContent()
)。如何使SelectedRecord
属性的更改能够更新UserControlViewModel
的Record
属性以生成新内容?或者我的UserControlViewModel
可以听到OnPropertyChanged("SelectedRecord")
自动生成新内容吗?
我会使用信使,这样你的视图模型就可以很好地解耦。
这里有一个关于SO的帖子,谈论MVVM中的一个:
MVVM灯-如何访问其他视图模型中的属性
或者,您的UserControlViewModel可以侦听ApplicationVM上的PropertyChanged事件,但要做到这一点,UserControlViewModel需要对ApplicationVM的引用。
最后,您可以使用事件系统在视图模型之间进行通信。这将确保视图模型很好地解耦,但代价会增加复杂性。如果您感兴趣,请查看Prism事件聚合器上的文档。