在多级TreeView上使用ItemsControl

时间:2009-12-07 23:05:25

标签: wpf silverlight binding treeview itemscontrol

我的同事今天威胁要把我放在TheDailyWTF,因为我写的属性是用来建立一个带有ItemsControl的3层树视图。

我告诉你足迹:

ObservableCollection<KeyValuePair<string, ObservableCollection<KeyValuePair<string, ObservableCollection<MyType>>>>>;

我的目标是创建一个ItemsControl,它将Key用作标题,Value作为ItemsSource用于3个级别:

<Style x:Key="filterTreeStyle" TargetType="ItemsControl">
        <Setter Property="ItemTemplate">
            <Setter.Value>
                <DataTemplate>
                    <controls:TreeViewItem IsExpanded="True">
                        <controls:TreeViewItem.Header>
                            <controlsToolkit:TreeViewItemCheckBox Content="{Binding Key}"/>
                        </controls:TreeViewItem.Header>
                        <ItemsControl ItemsSource="{Binding Value}">
                            <ItemsControl.ItemTemplate>
                                <DataTemplate>
                                    <controls:TreeViewItem>
                                    <controls:TreeViewItem.Header>
                                        <controlsToolkit:TreeViewItemCheckBox Content="{Binding Key}"/>
                                    </controls:TreeViewItem.Header>
                                        <controlsToolkit:TreeViewItemCheckBox IsChecked="{Binding Enabled}" Content="{Binding FilterTypeText}"/>
                                    </controls:TreeViewItem>
                                </DataTemplate>
                            </ItemsControl.ItemTemplate>
                        </ItemsControl>
                    </controls:TreeViewItem>
                </DataTemplate>
            </Setter.Value>
        </Setter>
       </Style>

任何人都可以从TheDailyWTF的魔掌中拯救我吗?什么是更简洁的方法来做到这一点。如果我们能找到一种方法来使动作数量变得动态,那就可以获得奖励。

1 个答案:

答案 0 :(得分:3)

呃,也许我在这里很蠢,但是因为你想要一个TreeView ......为什么不使用TreeView呢?您还需要使用HierarchicalDataTemplate而不是vanilla DataTemplate:HDT的内容成为Header,ItemsSource用于创建子节点。这也将使得级别的数量变得动态。

TreeView内置于WPF中,并作为SDK的一部分在Silverlight中提供。