【发布时间】:2020-07-01 14:49:55
【问题描述】:
假设我有两个视图: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 将两者连接起来,并且我想尽可能避免编写属性更改事件处理程序。
【问题讨论】:
-
处理程序优于父虚拟机。因为带有handler的解决方案具有高灵活性和弱耦合。
-
那么如何将 FileVM 添加到编辑器(不仅仅是文件名)并将所选实例传递给它?
-
在xaml中如何布局以及如何使用两个视图:FileList和Editor?可以给我们看一下相关代码sn-p吗?
标签: c# xaml mvvm uwp viewmodel