首页 > 解决方案 > 视图模型之间的绑定属性

问题描述

可以说我有两种观点:FileListEditor。他们都有自己的视图模型,使用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.FileNameEditorVM.FileName. 每当所选文件或文件名更改时,编辑器中的文件名也应更改。每当编辑器更改编辑器中的文件名时,所选文件的名称也应更改。

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

标签: c#xamlmvvmuwpviewmodel

解决方案


请看: MVVM中View Models之间的通信

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

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


推荐阅读