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

标签 wpf wpf-controls binding datatemplate

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

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

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]>

最佳答案

使用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>

关于WPF 使用 DataTemplate 隐式选择模板,但在 'List' 之外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7175916/

相关文章:

c# - 将 DataGridView 列绑定(bind)到 BindingList<T> 后使其可编辑

binding - SAPUI5 - 复杂模型绑定(bind)

.net - 获取对渲染线程的引用,以允许线程安全的数据访问

WPF SelectedItem 在 MVVM 中不起作用

c# - 当 DataTemplate 为 Button 时,ListBox 项返回字符串

wpf - 如何将 View 拆分为 m-v-vm 中的模块

c# - 10 秒后重定向到新的 wpf 窗口?

ios - @Binding 属性不会刷新 SwiftUI 中 subview 的 View

wpf - 设置内容控制的背景

带有两个拇指的 WPF slider