c# - 视图模型之间的绑定属性
问题描述
可以说我有两种观点: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 将两者连接起来,并且如果可能的话,我想避免编写属性更改事件处理程序。
解决方案
我建议使用像 Galasoft 这样的 MVVM 框架,因为它们具有有用的功能并且通常使用 MVVM 更容易;)
如果您不喜欢使用它们,您可以在一个 VM 中添加事件 SelectedFileChanged 并从另一个 VM 订阅它。
推荐阅读
- javascript - 如何解决当我单击确定时它会删除数据但当我单击取消时它也会删除。单击取消时它应该什么都不做
- firebase - Firebase 的离线镜像
- c++ - 如何从 SHELLEXECUTEINFO 对象读取控制台输出?
- django - 如何使用模板标签呈现表单“属性”/字段小部件
- python - 如何处理xml文件中丢失的数据?
- php - 如何在 html 中使用带有数据列表的 foreach 循环
- hover - 列表悬停弄乱整个导航 div
- python - Tkinter Message 小部件不占用所有水平空间
- java - 如何通过 Junit 测试 Spring Boot Transactional 注释是否有效
- javascript - 根据屏幕大小更改 div 背景。使用 JS 和更改 CSS