Использование ItemsControl в многоуровневом TreeView - PullRequest
0 голосов
/ 08 декабря 2009

Мой коллега угрожал поместить меня в TheDailyWTF сегодня из-за моей собственности, которую я написал для создания трехуровневого дерева с ItemsControl.

Я несу тебе след:

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

Моя цель состояла в том, чтобы создать ItemsControl, который использовал бы Ключ в качестве заголовка и Значение в качестве 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 Ответ

3 голосов
/ 08 декабря 2009

Э-э, может быть, я тут тупой, но так как вы хотите TreeView ... почему бы не использовать TreeView? Вам также нужно будет использовать HierarchicalDataTemplate вместо ванильного DataTemplate: содержимое HDT становится Заголовком, а ItemsSource используется для создания дочерних узлов. Это также позаботится о том, чтобы количество уровней было динамичным.

TreeView встроен в WPF и доступен в Silverlight как часть SDK.

...