C# 如何在ViewModel中侦听来自另一个ViewModel的更改?
我的任务是编写一个用户控件,使用MVVM模式显示一些结果 主应用程序(称为C# 如何在ViewModel中侦听来自另一个ViewModel的更改?,c#,wpf,mvvm,C#,Wpf,Mvvm,我的任务是编写一个用户控件,使用MVVM模式显示一些结果 主应用程序(称为ApplicationVM)有两个属性UserControlViewModel和SelectedRecord。第一个属性包含UserControlViewModel的实例。在XAML中,我使用这些属性将UserControl绑定到UserControlViewModel。DependencyPropertyPageCount用于视图中的显示功能和UserControlViewModel之间的简单通知 <control
ApplicationVM
)有两个属性UserControlViewModel
和SelectedRecord
。第一个属性包含UserControlViewModel
的实例。在XAML中,我使用这些属性将UserControl
绑定到UserControlViewModel
。DependencyPropertyPageCount
用于视图中的显示功能和UserControlViewModel
之间的简单通知
<control:UserControl DataContext="{Binding UserControlViewModel}" PageCount="{Binding DocumentPageCount}" />
稍后,此属性将被替换。但我应该做的是在属性“
SelectedRecord
”和“UserControlViewModel
”的“记录”之间建立依赖关系,后者调用函数来生成新内容(例如,GenerateContent()
)。如何更改SelectedRecord
属性来更新UserControlViewModel
的Record
属性以生成新内容?或者我的UserControlViewModel
可以听到OnPropertyChanged(“SelectedRecord”)
自动生成新内容吗?一个简单的解决方案是更新SelectedRecord属性的setter。在这里,您可以在UserControlViewModel上调用GenerateContent方法,如果需要,还可以在那里设置SelectedRecord属性
或者,您的UserControlViewModel可以侦听ApplicationVM上的PropertyChanged事件,但要做到这一点,UserControlViewModel需要对ApplicationVM的引用
最后,您可以使用事件系统在视图模型之间进行通信。这将确保视图模型被很好地解耦,但代价会增加复杂性。如果您感兴趣,请查看上的文档。我会使用messenger,这样您的视图模型可以很好地解耦
这里有一个关于MVVM的话题:
看一看,您应该在此处使用中介模式()
public Record SelectedRecord
{
get
{
return m_SelectedRecord;
}
set
{
m_SelectedRecord = value;
OnPropertyChanged("SelectedRecord");
}
}