对于使用MVVM模式的WPF应用程序,使用DataTemplate将视图链接到ViewModel
当前我有一些视图链接到ViewModels,使用类似于以下代码:对于使用MVVM模式的WPF应用程序,使用DataTemplate将视图链接到ViewModel,wpf,xaml,mvvm,Wpf,Xaml,Mvvm,当前我有一些视图链接到ViewModels,使用类似于以下代码: <Application.Resources> <DataTemplate DataType="{ x:Type vm:AgeIndicatorViewModel}"> <v:AgeIndicatorView /> </DataTemplate> </Application.Resources> 关于这一点,我有两个问题:
<Application.Resources>
<DataTemplate DataType="{ x:Type vm:AgeIndicatorViewModel}">
<v:AgeIndicatorView />
</DataTemplate>
</Application.Resources>
关于这一点,我有两个问题:
- 这种方法是否允许我只将一个视图链接到每个视图模型(我认为它确实改善了我的这种限制,但我想确定一下)
- 使用此方法时,应将所有DataTemplate声明放在何处?目前只有几个,它们都在App.Xaml中-有更好的位置吗,或者App.Xaml很好/最好的位置吗
这就是说,如果项目成为一个非常大规模的项目,那么最好开始使用-这允许您在定义视图/视图模型对的“附近”设置资源字典,然后在更高级别上使用它们(即:将它们合并到App.Xaml中).像您在问题中那样指定隐式数据模板会将视图模型绑定到单个视图。但是,您可以在任何控制级别覆盖此选项,因此您可以:
<Window.Resources>
<DataTemplate DataType="{x:Type vm:AgeIndicatorViewModel}">
<v:AgeIndicatorView2 />
</DataTemplate>
</Window.Resources>
这将更改应用于给定窗口的视图模型的视图。这可以在任何级别的任何控件上完成
不过,在应用程序级别执行此操作的好处是,它可以应用于应用程序中的所有窗口。而我上面的例子只适用于一个窗口
一般来说,应用程序资源是定义这些资源的最佳位置。因为如果您有多个窗口(即Window1和Window2),那么视图模型将始终拾取隐式数据模板