在MVVM中,DataTemplates认为视图是UserControls是视图吗?

时间:2009-06-19 07:58:21

标签: .net wpf mvvm viewmodel datatemplate

在MVVM中,每个View都有一个ViewModel。一个视图我理解为一个 Window,Page或UserControl ,你可以附加一个ViewModel,视图从中获取数据。

DataTemplate 也可以呈现ViewModel的数据。

所以我理解DataTemplate是另一个“视图”,但似乎有差异,例如Windows,Pages和UserControls可以定义自己的.dll,一种类型与DataContect绑定,另一种类型通过附加模板绑定,以便Windows,Pages,UserControls可以通过 ServiceLocator / Container 等等。

当在UI上呈现ViewModel的数据时,DataTemplates与Windows / Pages / UserControls有何不同?除了这四种之外还有其他类型的“观点”吗?

3 个答案:

答案 0 :(得分:7)

我使用它的方式,DataTemplate实际上是将View链接到ViewModel的方式。通常我在MVVM中的DataTemplates看起来像这样:

<DataTemplate DataType="{x:Type vm:FooViewModel}">
    <v:FooView />
</DataTemplate>

答案 1 :(得分:1)

在过渡到MVVM时,对我来说最有意义的是:

UserControls:将用于执行整个过程的组视图和控件组合在一起。我使用usercontrol作为我创建的滑出式抽屉,允许用户翻阅不同的部件分类(其中每个主要部件类别通过它自己的选择过程/向导来路由用户)。另请参阅图表控件。

视图:基本上是一个网格,它将相关数据和控件分组,以最小的级别填充所需的数据,以便可以重复使用。

DataTemplates:在列表框或GridView中组合“项目”的事实。我认为这只是一个文本代表一个对象,你试图在列表中获取信息。因此,控件模板将包装数据模板块以控制该数据模板包装项集合的显示行为。

这就是我理解它的方式,但边界非常模糊。我喜欢Andrew Troelson的Apress书 Pro Expression Blend 4 。不过,他并没有真正提供任何数据密集的例子。

答案 2 :(得分:0)

我不建议使用DataTemplate将视图绑定到viewmodel。 我目前在使用此方法时遇到性能问题,因为每次视图获得焦点时视图都会刷新。 如您所见herehere

Unfortunatley我还没有找到更好的选择。