如何模拟子视图模型与父视图模型的交互?

时间:2011-09-26 12:45:14

标签: events design-patterns mvvm

考虑使用PimDetailVm进行某种个人信息管理演示,该演示将Person对象作为其模型。该演示文稿将管理一个人的各个方面(姓名,联络点,地址等),这些方面将使原始视图模型膨胀。

所以我想拆分每个的卫星视图模型。原始视图模型仍然负责允许和提交更新,因此至少需要知道IsDirty和IsValid是否为真,以及模型的当前状态。

干杯,
Berryl

更新

原帖中有太多文字;也许更好地组织这个会得到更多的回应并留下一些有用的东西,所以

父/子同步选项

  1. INPC
    • 优点 - 已由VM实施
    • 缺点 - 多次触发,可能只应限制为DataBinding
  2. 中保
    • 优点 - 清洁分离意图
    • 缺点 - 不确定如何以通用方式实现和使用
  3. 事件聚合器
    • 优点 - 共同抽象
    • 缺点 - 不确定如何以通用方式实现和使用
  4. 域事件(即PersonUpdated)并让模型成为同步源
    • 优点 - 可以说事件属于此处,简化了VM基础设施
    • 缺点 - 不确定
  5. 视图内模型事件(即ViewModelUpdated)
    • 优点 - 比INPC更清洁,因为它只发射一个并且意图很明确
    • 缺点 - 不确定
  6. 硬链接(即Parent.Update())
    • 优点 - 意图清晰,易于调试
    • 缺点 - 紧耦合
  7. 继承自依赖对象
    • 优点 - 会喜欢它
    • 缺点 - 不可重用,紧密耦合到WPF调度程序
  8. 从DynamicObject继承VM
    • 优点 - 你可以做你想做的事
    • 缺点 - 改变ViewModel结构,复杂到没有经验的程序员
  9. 将AOP与拦截器结合在一起
    • 优点 - 做你想做的事
    • 缺点 - 学习曲线,不明显

1 个答案:

答案 0 :(得分:0)

只是为了解决这个问题,Pete Brown解决了这个here的某些方面。

Josh Smith在hi MVVM Foundation library中还有两个非常有用的类来解决这个问题:Messenger和PropertyObserver。