2011-07-13 35 views
3

以下是一个简单的问题:您如何将视图链接到视图模型?复合WPF:数据模板与视图模型注入

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

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


数据模板的方式或 “视图模型第一” 的方法(Resources.xaml):

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


视图模型喷射方式或 “查看第一个” 的方法(PersonView .xaml.cs):

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

回答

11

我更喜欢使用的DataTemplates

  • 这使我可以设置多个视图基于属性

  • 我的ViewModels是我的应用程序相同的视图模型和视图是没有什么比一个漂亮更层,使我的ViewModel的用户友好。如果我使用ViewModel注入,比视图成为我的应用程序和开发团队突然不得不担心的东西

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

  • 我可以初始化使用基于我的需求,而不必使用通用导入那些

这只是几个原因参数化的构造不同的ViewModels ......我敢肯定有别人,但他们不”现在想起来

+0

那么你使用什么框架? – Ucodia

+0

@Ucodia我通常使用PRISM,但我有时使用MVVM Light Framework,因为当'CanExecute'参数改变时,它们的'RelayCommand'会在命令上产生一个PropertyChanged事件,而PRISM的'DelegateCommand'则不会。 – Rachel

+0

好的谢谢。那么你使用棱镜的区域特征吗?因为这是Prism的一个非常有趣的功能,但是这个使用了一种“先查看”的方法。 – Ucodia

0

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

0

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