在尝试理解MVVM模式时,我遇到this video链接的MVVM Light Toolkit website。
在TechDays 2010中 - Laurent Bugnion表示WPF / Silverlight都使用MVVM模式作为其结构。有人可以澄清一下WPF / SL中的哪些组件(哪个Bugnion具体命名并列在下面)是Model,ViewModel和View?
答案 0 :(得分:1)
我没看过视频。绝对是控件模板和数据模板是您的视图。依赖项属性实际上也是视图的一部分,但可以绑定到类中的数据,该类用作视图的模型,即视图模型。他所指的“代码”必须是你的模型的业务逻辑。
我认为它是三个对象。您有一个视图对象,就像TextBox控件一样,它以包含模板的其他视图对象的形式应用了样式。 TextBox还具有依赖项属性,这些对象属性可以将TextBox上的值绑定(同步)到另一个对象上的值。该对象是TextBox的DataContext,它是您的视图模型对象。视图模型对象可以被视为模型的适配器,以支持视图的特定需求。
答案 1 :(得分:1)
The Model represents the data and business logic. It should represent your business
(域名),无论如何都不应该知道您的用户界面。
The View this is the UI – the bridge between your software and its users. Normally
View只知道ViewModel,但可能会出现这种情况 将模型直接暴露给它的意义。所以你的XAML for UI就像Grid,Button, 可以在此处找到DataTemplate,Style,control Template等。
The ViewModel: this is the way you connect your model to a specific View. See it has
以View可以使用的方式按摩您的模型的代码。 ViewModel应该是 查看不可知模型应该。所以View和ViewModel之间的通信是 纯粹基于DataBinding。在处理MVVM模式时,请使用Dependency 物业将是最低限度的。例如,当您在创建任何自定义控件时 那个时候你必须使用Dependency属性来支持绑定。
答案 2 :(得分:1)
他声称有三个项目是MVVM模式的一部分
这有一个缺陷。这些东西不是MVVM的一部分;他们启用了MVVM。 MVVM的部分是Model,View和ViewModel。将“代码”称为MVVM的一部分或将其称为ViewModel的一部分是过于简单化和无用的。
Listbox控件中有代码;如果没有,它将无法运作。
当然,View中的代码不赞成,而其他人则认为它很有可能。
当试图理解MVVM专注于Model,ViewModel和View的职责时,不要过于担心代码,依赖属性和控制模板。您无法将这些映射到MVVM。
答案 3 :(得分:1)
我是第一个承认这有点紧张的人;)让我澄清一下。该声明用于说明MVVM是SL / WPF(以及使用XAML和数据绑定的所有其他框架)中非常自然的模式。在这个例子中,我讨论的是控件代码之间的关注点分离(一般不是指“代码”,而是指控件的代码,例如Button类)及其模板。在此图示中,代码的作用类似于ViewModel,即它驱动视图。模板更明显是View。它们之间的粘合剂是通过依赖属性启用的数据绑定。
当我说它有点延伸时,我们可以看到这个比喻中没有模型。此外,将控件的视图绑定到其viewmodel(代码)的机制比仅仅DP和绑定稍微复杂一些。还添加了命名约定。
回想起来,我想我本可以更清楚,而且我把这个类比推得太过分了。我想我要从中得到的主要观点是:在SL / WPF中,代码和视图通过数据绑定松散耦合。对于基本控件来说也是如此,您还可以在数据绑定的帮助下以松散耦合的方式构建应用程序。
我希望现在更有意义;)
干杯, 劳伦