根据TreeView选择绑定的类型显示UserControl

时间:2010-04-08 01:00:40

标签: wpf

我在WPF中以类似于Windows资源管理器的方式制作应用程序,左侧是TreeView,右侧是窗格。

我希望右窗格的内容根据TreeView中所选元素的类型进行更改。

例如,假设树视图中的顶层包含类“A”的对象,如果展开“A”对象,您将看到“B”对象列表作为“A”对象的子对象。

如果选择“A”对象,我希望右窗格显示“A”的用户控件,如果选择“B”,我希望右窗格显示“B”的用户控件。 / p>

我目前的工作是:

  • 使用每种类型的一个HierarchialDataTemplate设置TreeView
  • 将所有UserControl添加到右侧窗格,但已折叠
  • 在TreeView上实现SelectedItemChanged,并将相应的用户控件设置为可见,将其他用户控件设置为折叠。

    但是,我确信有更好/更优雅的方式根据选择绑定的类型切换视图,可能更多地使用数据绑定...任何想法?

  • 2 个答案:

    答案 0 :(得分:10)

    您是否考虑过将ContentControl显示为右侧窗格,并使用DataTemplates自定义内容?然后,您只需将右窗格绑定到TreeView的选定项目即可。

    例如:

    <ContentControl Content="{Binding SelectedItem,ElementName=treeView1}">
        <ContentControl.Resources>
            <DataTemplate DataType="{x:Type my:A}">
                <StackPanel>
                    <TextBlock Text="Displaying an A!" />
                    <TextBlock Text="{Binding Foo}" />
                </StackPanel>
            </DataTemplate>
    
            <DataTemplate DataType="{x:Type my:B}">
                <StackPanel>
                    <TextBlock Text="Displaying a B!" />
                    <TextBlock Text="{Binding Bar}" />
                </StackPanel>
            </DataTemplate>
        </ContentControl.Resources>
    </ContentControl>
    

    答案 1 :(得分:6)

    您可以将ContentPresenter类与DataTemplateSelector一起使用。将Content属性绑定到TreeView.SelectedItem属性,然后使用DataTemplateSelector有条件地选择模板。