这个问题是这个旧问题的后续问题,它更像是一个确认而不是一个开放的问题。
我的 ViewModel 实例有一个模型的私有实例,_modelInst
.
ViewModel 在编辑期间拥有对 Model 数据的独占访问权限(因此 Model 不需要实现 INotifyPropertyChanged)。
现在我想出了三种从视图中编辑模型数据的方法:
直接在模型实例上获取/设置,
例如简单的值字段
return _modelInst.fieldname;
_modelInst.fieldname = value;
这很容易实现......创建一个 ViewModel 实例并在父级的数据结构上进行操作,
例如对于更复杂的对象类型,如 structs:- 为该类型创建一个新的 ViewModel。
ViewModel 知道父级及其字段名。 - 在 ContentControl+DataTemplate 中显示
- 获取/设置:
通过以字段名为参数的父类方法,
覆盖整个原始对象,即使只更改了一个字段
_modelInst
这意味着为这些结构中的每一个创建一个由父级实现的新接口(使用更新例程)。- 为该类型创建一个新的 ViewModel。
在不直接了解父类数据结构的情况下创建 ViewModel 实例,
例如父类中的类(列表)为每个类创建一个新的 ViewModel
通过发送更新指令给父母
- 命令
- 消息
- 反射(父母
通过将实例与所有存储的孩子进行比较来知道哪个孩子调用了函数)
所有这些都是一大堆实现,为模型的每个可编辑字段创建函数。
这意味着模型的几乎所有领域......
(4.) 可以创建一个仅通过反射工作的通用 ViewModel,其中每个子对象都知道其父对象及其字段名(+index,如果在列表中)。
然后只有根的逻辑会干扰模型。
但是该解决方案还需要一种方法来将路径存储在_modelInst
.
有没有其他(更简单)的方法来实现这一点?
我是否(再次)误解了 MVVM 的原理?
MVVM 是否适合处理大型分层数据结构?