在我的WPF应用程序中,我有一个名为CompanyViewModel
的viewmodel类。
有时,此类的实例被设置为我的主窗口的DataContext
,其定义如下:
<window x:Class= ..... >
<Grid>
<ContentControl Content="{Binding }"></ContentControl>
</Grid>
</Window>
在这种情况下,我希望使用一个显示viewmodel的所有属性的视图。
其他时候,ListView
控件将其itemsource设置为包含CompanyViewModel
实例的集合。在这里,我希望使用一个只呈现一些重要属性的视图。
我在MainWindow.xaml
的资源词典中有这个:
<DataTemplate DataType="{x:Type vm:CompanyViewModel}">
<vw:CompanyView></vw:CompanyView>
</DataTemplate>
是否可以根据viewmodel绑定的上下文选择viewmodel的视图?例如,要在CompanyView
窗口中显示ContentControl
时使用TabControl
,还是使用CompanyViewSmall
中显示的ListView
?
答案 0 :(得分:1)
首先在本地查找要使用的DataTemplate
,然后在找不到Visual Tree层次结构时进一步查找。
因此,您可以指定DataTemplate
在层次结构中使用更远的地方,以使用与正常情况不同的内容。
例如,以下内容将使用CompanyView
位于可见树中CompanyViewModel
的任何位置,但ListView
指定为DataTemplate
的特定<Window.Resources>
<DataTemplate DataType="{x:Type vm:CompanyViewModel}">
<vw:CompanyView />
</DataTemplate>
</Window.Resources>
<ListView>
<ListView.Resources>
<DataTemplate DataType="{x:Type vm:CompanyViewModel}">
<vw:CompanyViewSmall />
</DataTemplate>
</ListView.Resources>
</ListView>
除外图。
ListView
您还可以使用隐式样式.Resources
告诉它使用ListView
中较小的模板,但是这会将较小的视图应用于任何ListView
,而不仅仅是如果您将另一种样式应用于DataTemplate
,则必须记住继承默认样式以保持较小的<Style TargetType="{x:Type ListView}">
<Style.Resources>
<DataTemplate DataType="{x:Type vm:CompanyViewModel}">
<vw:CompanyViewSmall />
</DataTemplate>
</Style.Resources>
</Style>
。
{{1}}