2

在我的 WPF 应用程序中,我有一个名为CompanyViewModel.

有时,这个类的一个实例被设置为DataContext我的主窗口,它的定义如下:

<window x:Class= ..... >
    <Grid>
        <ContentControl Content="{Binding }"></ContentControl>
    </Grid>
</Window>

在这种情况下,我希望使用一个显示视图模型的所有属性的视图。

其他时候,ListView控件将其 itemsource 设置为包含CompanyViewModel. 在这里,我希望使用一个只呈现一些重要属性的视图。

我在资源字典中有这个MainWindow.xaml

<DataTemplate DataType="{x:Type vm:CompanyViewModel}">
    <vw:CompanyView></vw:CompanyView>
</DataTemplate>

是否可以根据绑定视图模型的上下文为视图模型选择视图?例如,使用CompanyViewwhen 显示在ContentControlwindow 或 when 在 a 中TabControl,以及使用CompanyViewSmallwhere 显示在 a 中ListView

4

1 回答 1

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,而不仅仅是特定的,如果您曾经将另一种样式应用于 aListView您必须记住继承默认样式以保持较小的DataTemplate.

<Style TargetType="{x:Type ListView}">
    <Style.Resources>
        <DataTemplate DataType="{x:Type vm:CompanyViewModel}">
            <vw:CompanyViewSmall />
        </DataTemplate>
    </Style.Resources>
</Style>
于 2012-04-18T18:58:59.893 回答