C# 视图模型之间的绑定属性

C# 视图模型之间的绑定属性,c#,xaml,mvvm,uwp,viewmodel,C#,Xaml,Mvvm,Uwp,Viewmodel,假设我有两个视图:FileList和Editor。 它们都有自己的视图模型,使用dependencProperty绑定。 视图模型看起来有点像这样: 公共类FileVM:INotifyPropertyChanged { 公共字符串文件名{get;set;} } 公共类FileListVM:INotifyPropertyChanged { 公共ObservableCollection文件{get;set;} public FileVM SelectedFile{get;set;} } 公共类编辑器

假设我有两个视图:
FileList
Editor
。 它们都有自己的视图模型,使用
dependencProperty
绑定。 视图模型看起来有点像这样:

公共类FileVM:INotifyPropertyChanged
{
公共字符串文件名{get;set;}
}
公共类FileListVM:INotifyPropertyChanged
{
公共ObservableCollection文件{get;set;}
public FileVM SelectedFile{get;set;}
}
公共类编辑器VM:INotifyPropertyChanged
{
字符串文件名{get;set;}
}
假设他们正确地实现了INotifyPropertyChanged

现在我不想让
FileListVM
EditorVM
互相了解。它们也可以很容易地独立存在。但是在一个用例中,我想将
FileListVM.SelectedFile.FileName
绑定到
EditorVM.FileName
。每当选定的文件或文件名更改时,编辑器中的文件名也应更改。每当编辑器在编辑器中更改文件名时,所选文件的名称也应更改

现在我的问题是:我怎样才能做到干净?我猜解决方案就在它们的父视图模型中(例如,
MainVM
),因为该视图模型知道两个子视图模型之间的连接。但我不确定是否可以通过xaml将两者连接起来,如果可能的话,我希望避免编写属性更改事件处理程序。

请查看:

我建议使用像Galasoft这样的MVVM框架,因为它们具有有用的功能,而且通常使用MVVM会更轻松;)


如果您不喜欢使用它们,您可以在一个VM中添加event SelectedFileChanged并从另一个VM订阅它

处理程序优于父VM。因为带有处理程序的解决方案具有很高的灵活性和弱耦合性。那么,如何将FileVM添加到编辑器(而不仅仅是文件名)并将所选实例传递给它呢?如何在xaml中布局以及如何使用这两个视图:FileList和Editor?你能给我们看一下相关的代码片段吗?