c# - 在分层数据结构中添加对 MVVM 的编辑

标签 c# mvvm data-binding hierarchical-data two-way-binding

这个问题是this older的后续问题一个,它更像是一个确认而不是一个开放的问题。

我的 ViewModel 实例有一个模型的私有(private)实例,_modelInst
ViewModel 在编辑期间拥有对 Model 数据的独占访问权限(因此 Model 不需要实现 INotifyPropertyChanged)。

现在我想到了三种从 View 编辑模型数据的方法:

  1. 直接在模型实例上获取/设置
    例如对于简单值字段
    返回 _modelInst.fieldname;
    _modelInst.fieldname = value;
    这个很容易实现...

  2. 创建一个 ViewModel 实例并对父级的数据结构进行操作
    例如对于结构等更复杂的对象类型:

    • 为该类型创建一个新的 ViewModel。
      ViewModel 知道父级及其字段名。
    • 在 ContentControl+DataTemplate 中显示
    • 获取/设置:
      通过以字段名作为参数的父方法,
      即使只更改了一个字段,也会覆盖整个原始对象

    这意味着为每个结构创建一个新接口(interface)(更新例程在 _modelInst 上运行),由父级实现。

  3. 在不直接了解父级数据结构的情况下创建 ViewModel 实例
    例如对于父类中的类(列表)

    • 为每个类创建一个新的 ViewModel

    • 通过以下方式向家长发送更新说明

      1. 命令
      2. 消息
      3. 反射( parent 知道哪个 child 调用了函数
        通过将实例与所有存储的 child 进行比较)

      所有这些都是一团糟的实现,为 模型的每个字段都是可编辑的。
      这意味着模型的几乎所有领域..​​....

(4.) 可以创建一个仅通过反射工作的通用 ViewModel,其中每个 子对象知道其父对象及其字段名(+index,如果在列表中)。
只 Root过的逻辑会干扰模型。
但该解决方案还需要一种方法来将路径存储到 _modelInst 中。

是否有任何其他(更简单)的方法可以实现此目的?
我是不是又误解了 MVVM 的原理了?
MVVM 是否适合处理大型分层数据结构?

最佳答案

希望这些资源能有所帮助;在我学习 MVVM 以及如何使用 View 模型表示对象图/层次结构时,它们对我帮助很大:

  1. Editable Object Adapter
  2. Editable Collection Adapter
  3. MicroModels

关于c# - 在分层数据结构中添加对 MVVM 的编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3361089/

相关文章:

silverlight - ItemsControl 的内部属性在绑定(bind)到 ItemsSource 时未更新

c# - 是否有用于将属性从一个类绑定(bind)到另一个类的开源 C# 库?

mysql - join、外键等关系型DB规划

C#:在 HttpContextAccessor 中添加自定义属性

c# - 如何强制浏览器使用版本控制重新加载缓存的静态文件?

c# - 如何在不同的返回类型函数中返回错误消息?

wpf - WPF 图像控件中的初始图像

c# - 范围服务为请求创建两个不同的实例

wpf - 如何使用 MVVM Light Toolkit 打开新窗口

xaml - ui没有实时更新