假设我有两个观点:FileList
和 Editor
.
他们都有自己的 View 模型,使用 DependencyProperty
绑定(bind)。 .
View 模型看起来有点像这样:
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
了解彼此。它们也可以很容易地独立存在。但在一个用例中,我想绑定(bind) FileListVM.SelectedFile.FileName
至EditorVM.FileName
.每当所选文件或文件名更改时,编辑器中的文件名也应更改。每当编辑器更改编辑器中的文件名时,所选文件的名称也应更改。现在这是我的问题:我怎样才能干净地做到这一点?我猜测解决方案位于其父 View 模型中的某个位置(例如
MainVM
),因为该 View 模型知道两个 subview 模型之间的连接。但是我不确定是否可以通过 xaml 将两者连接起来,并且如果可能的话,我想避免编写属性更改事件处理程序。
最佳答案
请看:
Communicate between View Models in MVVM
我建议使用像 Galasoft 这样的 MVVM 框架,因为它们具有有用的功能并且通常使用 MVVM 更容易;)
如果您不喜欢使用它们,您可以在一个 VM 中添加事件 SelectedFileChanged 并从另一个 VM 订阅它。
关于c# - View 模型之间的绑定(bind)属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60774625/