Events 子视图模型与父视图模型交互的建模方法?

Events 子视图模型与父视图模型交互的建模方法?,events,design-patterns,mvvm,Events,Design Patterns,Mvvm,考虑使用PIMDailVM进行某种个人信息管理演示,它以Person对象为模型。演示文稿将管理一个人的各个方面(姓名、联系点、地址等),这些方面将共同影响原始视图模型 所以我想为每一个分离卫星视图模型。但是,原始视图模型仍然负责允许和提交更新,因此它至少需要知道IsDirty和IsValid是否为真,以及模型的当前状态 干杯, 贝里尔 更新 我原来的帖子里有太多的文字;也许组织得更好会得到更多的回应,留下有用的线索,所以 父/子同步选项 INPC Pros-已由VM实现 Cons-多次触发,可

考虑使用PIMDailVM进行某种个人信息管理演示,它以Person对象为模型。演示文稿将管理一个人的各个方面(姓名、联系点、地址等),这些方面将共同影响原始视图模型

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

干杯,
贝里尔

更新 我原来的帖子里有太多的文字;也许组织得更好会得到更多的回应,留下有用的线索,所以

父/子同步选项

  • INPC
    • Pros-已由VM实现
    • Cons-多次触发,可以说应该仅限于数据绑定
  • 调解人
    • Pros-明确的意图分离
    • 缺点-不确定如何以通用方式实现和使用
  • 事件聚合器
    • 公共抽象
    • 缺点-不确定如何以通用方式实现和使用
  • 域事件(即PersonUpdate),并将模型作为同步源
    • 优点-可以说,事件属于这里,简化了虚拟机基础架构
    • 缺点-不确定
  • 视图内模型事件(即视图模型更新)
    • Pros-比INPC更干净,因为它只发射一个,并且其意图是明确的
    • 缺点-不确定
  • 硬链接(即,Parent.Update())
    • 优点-意图明确,易于调试
    • Cons-紧耦合
  • 从依赖项对象继承
    • 赞成者-威尔喜欢它
    • 缺点-不可重用,与WPF调度程序紧密耦合
  • 从DynamicObject继承VM
    • 优点-你可以做你想做的事
    • 缺点-更改ViewModel结构,对于没有经验的程序员来说比较复杂
  • 将AOP与拦截器合并
    • 职业-做你想做的
    • 缺点-学习曲线,不明显

  • 为了结束这一切,皮特·布朗谈到了其中的一些方面


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

    为了解决这个问题,Pete Brown解决了其中的一些方面


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

    我通常只是让我的ViewModel扩展DO并在xaml中组合它们--
    ,但有些人讨厌这样。就像我讨厌在问题标题前加标签一样。燃烧的仇恨掏空了核心,只留下黑色的灰烬。如果这有助于让你的性格更阳光,我更喜欢你的头衔。“如何组合视图模型关系”可能也很有效!您是否有一些代码或链接可以更好地演示您的方法?为什么仇恨者如此讨厌它?老实说,没有任何特殊的代码。您只需扩展DependencyObject,并像对待其他对象一样对待ViewModels。在App.xaml中将它们创建为资源(StaticResource可以在任何地方找到它们)。您可以使用StaticResource标记扩展到处分配它们,您可以将它们彼此绑定,等等。有些人讨厌它,因为他们认为ViewModels应该与实现无关。但谁曾在两个不同的平台上使用过相同的ViewModel类型?这种代码重用是不存在的。像对待xaml中的其他东西一样对待它们非常简单。我通常只是让我的ViewModels在xaml中扩展并组合它们--
    ,但有些人讨厌这样。就像我讨厌在问题标题前加标签一样。燃烧的仇恨掏空了核心,只留下黑色的灰烬。如果这有助于让你的性格更阳光,我更喜欢你的头衔。“如何组合视图模型关系”可能也很有效!您是否有一些代码或链接可以更好地演示您的方法?为什么仇恨者如此讨厌它?老实说,没有任何特殊的代码。您只需扩展DependencyObject,并像对待其他对象一样对待ViewModels。在App.xaml中将它们创建为资源(StaticResource可以在任何地方找到它们)。您可以使用StaticResource标记扩展到处分配它们,您可以将它们彼此绑定,等等。有些人讨厌它,因为他们认为ViewModels应该与实现无关。但谁曾在两个不同的平台上使用过相同的ViewModel类型?这种代码重用是不存在的。像对待xaml中的其他东西一样对待它们非常简单。