假设我有两个视图:FileList
和Editor
。它们都有自己的视图模型,使用DependencyProperty
绑定。视图模型看起来有点像这样:
public class FileVM : INotifyPropertyChanged
{
public string FileName { get; set; }
}
public class FileListVM : INotifyPropertyChanged
{
public ObservableCollection<FileVM> Files { get; set; }
public FileVM SelectedFile { get; set; }
}
public public class EditorVM : INotifyPropertyChanged
{
string FileName { get; set; }
}
想象一下,他们正确地实现了INotifyPropertyChanged
。
现在我不想让FileListVM
和EditorVM
互相了解。他们可以很容易地独立存在。但在一个用例中,我想将FileListVM.SelectedFile.FileName
绑定到EditorVM.FileName
。每当选定的文件或文件名发生更改时,编辑器中的文件名也应发生更改。每当编辑器在编辑器中更改文件名时,所选文件的名称也应该更改。
现在我的问题是:我如何才能做到这一点?我猜解决方案在它们的父视图模型(例如MainVM
(中,因为该视图模型知道两个子视图模型之间的连接。但我不确定是否可以通过xaml将两者连接起来,如果可能的话,我希望避免编写属性更改的事件处理程序。
请查看:MVVM 中视图模型之间的通信
我建议使用像Galasoft这样的MVVM框架,因为它们具有有用的功能,而且通常使用MVVM会更轻松;(
如果您不喜欢使用它们,您可以在一个VM中添加事件SelectedFileChanged,并从另一个VM订阅它。