2011-07-21 53 views
3

目前我已经连接到使用类似于下面的代码的ViewModels一些看法使用DataTemplate中的WPF应用程序链接查看到视图模型:使用MVVM模式

<Application.Resources> 
     <DataTemplate DataType="{ x:Type vm:AgeIndicatorViewModel}"> 
     <v:AgeIndicatorView /> 
    </DataTemplate> 
</Application.Resources> 

我有一个关于这两个问题:

  • 请问这个方法让我只有一个链接查看每个视图模型(我认为它improse此限制我,而是要确保)

  • 使用此方法时,我应该在哪里放置所有DataTemplate声明?目前只有少数,他们都在App.Xaml - 有没有更好的位置,或者是App.Xaml罚款/最佳位置?

最重要的问题是,第二个真的,因为在现阶段,我想我的视图模型以这种方式链接到我的查看,因为它不需要任何外部库等

的方式我ViewModels已经设置好了,它们的属性和命令等已经全部工作了。

回答

2

请问这个方法让我只有一个链接查看每个视图模型(我认为它improse此限制我,而是要确保)

是。如果您尝试将多个ViewModel链接到多个视图,则需要将它们封装在单独的VM中,然后添加一个新的DataTemplate。

当使用这种方法时,我应该在哪里放置所有的DataTemplate声明?目前只有少数,他们都在App.Xaml - 有没有更好的位置,或者是App.Xaml罚款/最佳位置?

App.Xaml很好,或者在上面使用DataTemplate的视觉层次结构中的任何地方。这就是说,如果项目成为一个非常大型的项目,开始使用Merged Resource Dictionaries通常更好 - 这允许您在定义View/ViewModel对的地方设置资源字典“near”,但随后使用他们在更高的水平(即:合并到App.Xaml中)。

2

像你在你的问题中一样指定隐式DataTemplate将你的视图模型绑定到一个视图。您可以在任何控制水平,虽然覆盖此,所以你可以有:

<Window.Resources> 
    <DataTemplate DataType="{x:Type vm:AgeIndicatorViewModel}"> 
     <v:AgeIndicatorView2 /> 
    </DataTemplate> 
</Window.Resources> 

这将更改应用于视图模型对于给定的窗口中的视图。这可以在任何级别的任何控件上完成。

虽然在应用程序级别执行此操作的好处是它可以应用于应用程序中的所有窗口。虽然我上面的示例只适用于单个窗口。

通常,应用程序资源是定义这些资源的最佳位置。因为如果您有多个Windows(即Window1和Window2),那么您的视图模型将始终选取隐式的DataTemplate。