【问题标题】:Matching implementations to parts of the pattern将实现与模式的某些部分匹配
【发布时间】:2012-01-22 09:24:28
【问题描述】:

在尝试了解 MVVM 模式时,我遇到了从 MVVM Light Toolkit website 链接的 this video

TechDays 2010 - Laurent Bugnion 指出 WPF/Silverlight 都使用 MVVM 模式作为其结构。有人可以澄清一下 WPF/SL 中的哪些组件(Bugnion 专门命名并在下面列出)是模型、视图模型和视图吗?

这些是他所说的作为 MVVM 模式一部分的三个项目:

  1. 代码
  2. 依赖属性
  3. 控制模板(数据模板?

【问题讨论】:

    标签: wpf silverlight mvvm mvvm-light


    【解决方案1】:

    我是第一个承认这有点牵强的人;)但让我澄清一下。该声明旨在说明 MVVM 是 SL/WPF(以及所有其他使用 XAML 和数据绑定的框架)中非常自然的模式。在示例中,我讨论了控件代码(不是一般的“代码”,而是专门指控件的代码,例如 Button 类)与其模板之间的关注点分离。在此图中,代码的作用类似于 ViewModel,即它驱动视图。模板更明显是视图。而它们之间的粘合剂是通过依赖属性启用的数据绑定。

    当我说它有点牵强时,我们可以看到这个类比中没有模型。此外,将控件的视图绑定到其视图模型(代码)的机制比 DP 和绑定要复杂一些。还添加了命名约定。

    回想起来,我想我本来可以更清楚,但我把这个类比推得太远了。我想我希望你从中得到的主要观点是:在 SL/WPF 中,代码和视图通过数据绑定松散耦合。这适用于基本控件,您还可以借助数据绑定以松散耦合的方式构建应用程序。

    我希望它现在更有意义;)

    干杯, 洛朗

    【讨论】:

    • 很高兴您能以这种方式来拜访、澄清和处理问题
    【解决方案2】:

    我还没有看过视频。绝对控制模板和数据模板是您的视图。依赖属性实际上也是视图的一部分,但可以绑定到用作视图模型的类中的数据,即视图模型。他所指的“代码”必须是业务逻辑,即您的模型。

    我会认为它是三个对象。您有一个视图对象,例如 TextBox 控件,它以构成模板的其他视图对象的形式应用了样式。 TextBox 还具有依赖属性,这些属性是可以将 TextBox 上的值绑定(同步)到另一个对象上的值的对象。该对象是 TextBox 的 DataContext,它是您的视图模型对象。可以将视图模型对象视为模型的适配器,以支持视图的特定需求。

    【讨论】:

      【解决方案3】:
      The Model represents the data and business logic. It should represent your business
      

      (域)并且它不应该被您的 UI 感知。

      The View this is the UI – the bridge between your software and its users. Normally 
      

      View 只知道 ViewModel,但在某些情况下它可能会导致 感觉将模型直接暴露给它。所以你的 XAML 的 UI 像网格,按钮, 数据模板、样式、控件模板等都可以在这里找到。

      The ViewModel: this is the way you connect your model to a specific View. See it has 
      

      以视图可以使用的方式对模型进行按摩的代码。 ViewModel 应该是 像模型一样看待不可知论者。所以 View 和 ViewModel 之间的通信是 纯粹基于DataBinding。当您处理 MVVM 模式时,请使用 Dependency 财产将是最低限度的。例如,当您在创建任何自定义控件时 那个时候你必须使用 Dependency 属性来支持绑定。

      【讨论】:

      • 所以ViewModel 是 MVC 中控制器的同义词?
      【解决方案4】:

      他说三个项目是 MVVM 模式的一部分

      这里有一个缺陷。这些东西不是 MVVM 的一部分;他们启用了 MVVM。 MVVM 的部分是模型、视图和视图模型。将“代码”称为 MVVM 的一部分或将其称为 ViewModel 的一部分过于简单且无用。

      Listbox控件中有代码;如果没有它就不会起作用。

      当然,视图中的代码是不受欢迎的,而其他人则认为这很有可能。

      在尝试理解 MVVM 时,请关注 Model、ViewModel 和 View 的职责,不要过多担心代码、依赖属性和控制模板。您不能将这些映射到 MVVM。

      【讨论】:

        猜你喜欢
        • 2019-09-15
        • 1970-01-01
        • 2019-11-05
        • 1970-01-01
        • 2019-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多