MVVM:如何将ViewModel中的属性绑定到不同ViewModel中的属性?

3
在WPF应用程序中使用MVVMLight工具包。
我有一个ViewModel类来封装应用程序的设置,并有相应的View来允许用户更改它们。这些设置存储在注册表中。
我正在向主View添加一些状态指示器,以反映某些设置是否被切换开或关闭。将这些的可见性绑定到MainViewModel中的属性是有意义的。
是否可以将MainViewModel中的属性绑定到SettingsViewModel中的属性,还是应该使用消息告诉MainViewModel在SettingsViewModel中发生了更改?
感谢任何建议...
2个回答

3

一种简单的方法是在您的MainViewModel中将SettingsViewModel公开为属性,如下所示:

Public SettingsViewModel Settings
{
    get
    {
       return settingsViewModel;
    }
}

然后在你的MainView.xaml中,你的绑定可以这样做:
"{Binding Path=Settings.ASettingOnTheSettingsVM}"

谢谢,这基本上就是我所做的。由于SettingsView绑定到SettingsViewModel,我必须添加一些xxxTemp属性以让SettingsView绑定。当用户在SettingsView上点击“保存”时,持久化属性(MainView控制的属性)将会被更新。 - Number8
这是一个有用的解决方案,但这不会破坏MVVM模式吗?只是一个想法... - freakinpenguin

0
如果您的SettingsViewModel是从MainViewModel启动的,并且您已经实现了INotifyPropertyChanged接口,那么您只需监听SettingsViewModel.PropertyChanged事件即可:
MainViewModel中:
SettingsViewModel settingsViewModel = new SettingsViewModel();
settingsViewModel.PropertyChanged = SettingsViewModel_PropertyChanged;

...

private void SettingsViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
    // Monitor property changes here
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接