WPF使用DataTemplate隐式选择模板,但在'List'之外

时间:2011-08-24 13:06:55

标签: wpf wpf-controls binding datatemplate

在我的项目中,我有TreeView,它包含各种类型的对象树(所有子类都来自同一个超类)。

在我的TreeView右侧,我希望有一个“面板”(目前我只有一个网格),它显示有关当前在树中选择的对象的信息。我想使用DataTemplate,就像在this page上的第二个例子一样,来调整布局&我的“面板”的内容基于子类型;但是,我找不到合适的容器(因为我不想要列表控件 - 我想根据树视图中的选择更改一个项目的显示)。

This question问同样的事情,但我不认为答案适合我,因为我希望模板根据类型动态变化。

即。我希望有类似的东西:

<[A Suitable Container] Margin="189,39,12,12" DataContext="{Binding ElementName=treeView1, Path=SelectedItem}">
<DataTemplate DataType="{x:Type local:subclass1}">
    <Grid>
        <!-- subclass1 specific stuff -->
    </Grid>
</DataTemplate>
<DataTemplate DataType="{x:Type local:subclass2}">
    <Grid>
        <!-- subclass2 specific stuff -->
    </Grid>
</DataTemplate>
</[A Suitable Container]>

1 个答案:

答案 0 :(得分:4)

使用ContentControl

<ContentControl Content="{Binding ElementName=treeView1, Path=SelectedItem}">
    <ContentControl.Resources>
        <DataTemplate DataType="{x:Type local:ViewModelA}">
            <local:ViewA />
        </DataTemplate>
        <DataTemplate DataType="{x:Type local:ViewModelB}">
            <local:ViewB />
        </DataTemplate>
    </ContentControl.Resources>
</ContentControl>