【问题标题】:wpf mvvm confusionwpf mvvm 混乱
【发布时间】:2011-01-12 23:21:59
【问题描述】:

根据我对 mvvm 的理解。

有一个模型(也实现了 inotify...事件...

我只是想知道 viewmodel 类和 xaml 类背后的代码之间的区别......为什么我们不简单地考虑和增强背后的代码......

在我的脑海中没有足够的理由来证明这一点......

或者请用示例写一些东西来清除 mvvm...以及为什么 mvc 或 mvp 对 wpf 应用程序来说是地狱????

【问题讨论】:

    标签: wpf model-view-controller mvvm mvp


    【解决方案1】:

    模型没有实现 INotifyPropertyChanged,而 ViewModel 实现了。实际的 WPF 视图数据绑定到 ViewModel。现在有很多关于此的在线文档。

    http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

    MVVM 与 Fowler 的相同 演示模型,在这两者中 模式的特点是抽象 View,包含一个 View 的状态 和行为。

    http://blogs.msdn.com/johngossman/archive/2005/10/08/478683.aspx

    然而,在实践中,只有一小部分 应用程序 UI 的子集可以是数据 直接绑定到模型, 特别是如果模型是 预先存在的类或数据模式 应用程序开发人员没有 控制。该模型很可能 有一个数据类型不能 直接映射到控件。用户界面 可能想要执行复杂的操作 必须在代码中实现 在我们严格的情况下没有意义 视图的定义,但也是 具体要包含在模型中 (或者没有附带预先存在的 模型)。最后我们需要一个地方 放置视图状态,例如选择或 模式。 ViewModel 负责 对于这些任务。这个词的意思 “视图模型”,可以认为 作为视图的抽象,但它 还提供了一个专业化的 视图可以用于的模型 数据绑定。在后一个角色中, ViewModel 包含数据转换器 将模型类型转换为视图 类型,它包含命令 View 可以用来与 型号。

    MVVM 与 WPF 相关联,因为 WPF 的数据绑定机制与此模式结合使用时可轻松实现可测试的 GUI。

    【讨论】:

      【解决方案2】:

      首先,出于 MVVM 的目的,您不需要 VM 继承 ICommand。相反,VM 包含一组从 ICommand 继承的类型属性。所以 View 只是绑定到这些属性。菲:

      <Button Command="{Binding DoSomethingCommand}" />
      

      并且没有使用代码隐藏,因为它基本上是视图不可分割的一部分。它与您的 View 是同一类。您无法轻松对其进行测试,而且您的代码通常与 XAML 紧密耦合。

      Model 并没有义务(但可以)支持 INotifyPropertyChanged。而 ViewModel 当然应该实现这个接口来允许绑定。

      我建议您阅读一些关于该主题的介绍性文章。这不是那么令人困惑。这可以是第一个:http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

      【讨论】:

        【解决方案3】:

        我们为什么不简单地考虑和增强背后的代码......

        代码隐藏通常(总是?)最简单的方法...如果您是开发人员。但 MVVM 旨在帮助的不仅仅是开发人员。 MVVM 也适用于数据库女孩和图形专家。
        将 M(用于 db)和 V(用于艺术家)和 VM(用于您)分开允许每个人彼此独立工作。因此,例如,您不必等待图形专家制作 UI 即可连接数据库。你们都可以并行工作(理论上)。

        关注点分离意味着不同的工作。

        【讨论】:

          【解决方案4】:

          我们为什么不简单地考虑和增强背后的代码......

          (除了其他已经提到的:)因为它使您的代码更易于阅读。在文件背后的代码中,您拥有在 XAML 中不可能或复杂的 UI 内容。在视图模型代码文件中,您拥有与用数据填充表单相关的所有内容。

          与所有设计模式一样,盲目地遵循它并不是最好的主意。对于非常小的窗口,MVVM 可能没有意义。对于较大的窗口,MVVM 会强制您进行关注点分离,这通常会使您的代码隐藏文件和 MVVM 类更易于阅读、理解和调试。

          【讨论】:

            【解决方案5】:

            查看这两个视频以了解一些想法。两个视频都展示了从代码中的所有内容开始开发应用程序,然后重构为 MVVM 模式。

            另外,请参阅此 SO 问题以获取更多链接:MVVM: Tutorial from start to finish?

            【讨论】:

            • Jason Dolinger 的视频是炸弹。
            • Mike Taulty 的系列真的很棒,特别是如果你想在里面混上一点 Prism。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-03-30
            • 2010-12-22
            • 1970-01-01
            • 2017-04-03
            • 2012-02-06
            • 2010-12-04
            • 2011-05-05
            相关资源
            最近更新 更多