c# - View 模型之间的绑定(bind)属性

标签 c# xaml mvvm uwp viewmodel

假设我有两个观点:FileListEditor .
他们都有自己的 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 .

现在我不想要 FileListVMEditorVM了解彼此。它们也可以很容易地独立存在。但在一个用例中,我想绑定(bind) FileListVM.SelectedFile.FileNameEditorVM.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/

相关文章:

c# - 在 while 循环中返回

c# - 在泛型函数中使用基础对象作为参数

c# - 动画文本,让字母围成一圈

c# - 如何让 WPF 验证冒泡到父控件?

c# - 如何使用 StringFormat 舍入绑定(bind)的 double 值

c# - 如何将列表列表绑定(bind)到 View ?

c# - 从 RowDetailsTemplate 中的 DataGrid 无法访问 SelectedItem

c# - Fluent Nhibernate 映射问题

c# - 如何在移动设备上管理大量数据

wpf - 从 View 模型强制 wpf 控件更新