7

在 MVVM 中,每个 View 都有一个 ViewModel。我理解的视图是一个窗口、页面或用户控件,您可以将视图模型附加到其中,视图从中获取其数据。

但是DataTemplate也可以呈现 ViewModel 的数据。

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

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

4

3 回答 3

7

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

<DataTemplate DataType="{x:Type vm:FooViewModel}">
    <v:FooView />
</DataTemplate>
于 2009-06-19T10:02:38.167 回答
1

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

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

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

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

我是这么理解的,但是界限很模糊。我喜欢 Andrew Troelson 的 Apress 书Pro Expression Blend 4。不过,他并没有真正给出任何大量数据的例子。

于 2012-08-12T06:16:17.557 回答
0

我不建议使用 DataTemplate 将视图绑定到视图模型。我目前在使用这种方法时遇到性能问题,因为每次视图获得焦点时都会刷新视图。正如你在这里这里所看到的

不幸的是,我还没有找到更好的选择。

于 2010-05-18T14:59:58.990 回答