复合WPF:数据模板与视图模型注入

时间:2011-07-13 13:29:49

标签: wpf mvvm dependency-injection datatemplate

以下是一个简单的问题:您将视图与视图模型相关联的用途是什么?

基本上有两种常见的方法可以实现,数据模板和视图模型注入(下面的示例)。

我想知道的是为什么你喜欢一种方法而不是另一种方法,在这种情况下你使用它们。精确您使用的MVVM框架。


数据模板方式或“View Model first”方法(Resources.xaml):

<DataTemplate DataType="{x:Type my:PersonViewModel}">
    <my:PersonView/>
</DataTemplate>


视图模型注入方式或“查看第一”方法(PersonView.xaml.cs):

[Import]
public PersonViewModel ViewModel
{
    set
    {
        this.DataContext = value;
    }
}

3 个答案:

答案 0 :(得分:11)

我更喜欢使用DataTemplates

  • 它允许我根据属性为同一个ViewModel设置多个视图

  • 我的ViewModel是我的应用程序,而View只不过是一个漂亮的层,使我的ViewModel的用户友好。如果我使用ViewModel注入,那么视图就会成为我的应用程序而开发团队突然不得不担心UI方面的事情

  • 我的ViewModel由其他ViewModel管理。例如,一个ViewModel可能包含一个显示在TabControl中的其他ViewModel的集合。在父ViewModel中完成添加或关闭选项卡。使用View控制应用程序状态不容易实现这种功能。

  • 我可以根据需要使用参数化构造函数初始化不同的ViewModel,而不必使用通用的导入构造函数

这只是一些原因......我确定还有其他原因,但现在不会想到它们

答案 1 :(得分:0)

我们使用视图模型第一种方法,因为我们发现它更容易管理,特别是在大型企业应用程序上。我们使用Caliburn.Micro来处理视图位置和绑定。

答案 2 :(得分:0)

我同时使用两者。 DataTemplates适用于小型项目,但对于大型或团队项目,我们使用视图模型注入。