在分层数据结构中向MVVM添加编辑

Mar*_*ngs 5 c# data-binding mvvm hierarchical-data two-way-binding

这个问题是这个旧问题的后续问题,它更像是一个确认而不是一个开放的问题.

我的ViewModel实例有一个Model的私有实例_modelInst.
ViewModel在编辑期间可以独占访问Model的数据(因此Model不需要实现INotifyPropertyChanged).

现在我有三种方法可以从视图中编辑模型数据:

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

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

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

    这意味着_modelInst为每个结构创建一个由父级实现的新接口(使用更新例程).

  3. 创建ViewModel实例,而不直接了解父类的数据结构,
    例如父类中的(列表)类

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

    • 通过以下方式向父级发送更新说明

      1. 命令
      2. 消息
      3. 反射(父
        通过比较实例与所有存储的子代,知道哪个子函数调用了函数)

      所有这些都是一个很大的混乱实现,为可编辑的模型的每个领域创建功能.
      这几乎意味着模型的所有领域..​​....

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

有没有其他(更简单)的方法来实现这一目标?
我是否(再次)误解了MVVM的原理?
MVVM是否适合处理大型分层数据结构?

sel*_*dog 2

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

  1. 可编辑对象适配器
  2. 可编辑集合适配器
  3. 微模型