考虑使用 PimDetailVm 的某种个人信息管理演示,该演示将 Person 对象作为其模型。演示文稿将管理一个人的各个方面(姓名、联系方式、地址等),它们加在一起会使原始 View 模型膨胀。
所以我想为每个人拆分卫星 View 模型。原始 View 模型仍然负责允许和提交更新,因此至少需要知道 IsDirty 和 IsValid 是否为真,以及模型的当前状态。
干杯,
贝瑞尔
更新
我原来的帖子中的文字太多;也许更好地组织这件事会得到更多的回应并留下一些有用的东西,所以
父/子同步选项
- 国家石油公司
- 优点 - 已由 VM 实现
- 缺点 - 多次触发,可以说应该仅限于 DataBinding
- 调解员
- 优点 - 清晰的意图分离
- 缺点 - 不确定如何以通用方式实现和使用
- 事件聚合器
- 优点 - 通用抽象
- 缺点 - 不确定如何以通用方式实现和使用
- 域事件(即 PersonUpdated)并让模型成为同步源
- 优点 - 可以说事件属于这里,简化了 VM 基础设施
- 缺点 - 不确定
- 内部 View 模型事件(即 ViewModelUpdated)
- 优点 - 比 INPC 更干净,因为它只发射一个并且其意图很明确
- 缺点 - 不确定
- 硬链接(hard link)(即 Parent.Update())
- 优点 - 意图明确,更容易调试
- 缺点 - 紧耦合
- 从依赖对象继承
- 优点 - 会喜欢它
- 缺点 - 不可重用,与 WPF 调度程序紧密耦合
- 从 DynamicObject 继承 VM
- 优点 - 你可以做你想做的事
- 缺点 - 更改 ViewModel 结构,对没有经验的程序员来说很复杂
- 将 AOP 与拦截器相结合
- 优点 - 做你想做的事
- 缺点 - 学习曲线,不明显
最佳答案
为了真正结束这个问题,Pete Brown 解决了这个 here 的某些方面.
Josh Smith 在 hi 中也有两个非常有用的类(class) MVVM Foundation library解决这个问题的方法:Messenger 和 PropertyObserver。
关于events - 模拟 subview 模型与父 View 模型交互的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7555267/