0

私の同僚は、ItemsControlを使用して3層のツリービューを構築するために使用するために作成した私のプロパティのために、今日私をTheDailyWTFに入れると脅迫しました。

私はあなたに足跡を負います:

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

私の目標は、Keyをヘッダーとして使用し、ValueをItemsSourceとして3つのレベルで使用するItemsControlを作成することでした。

<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のクラッチから私を救うことができますか?これを行うためのよりクリーンな方法は何ですか。レベルの数を動的にする方法を見つけられればボーナス。

4

1 に答える 1

3

ええと、私はここでばかげているかもしれませんが、TreeViewが必要なので... TreeViewを使用してみませんか?また、バニラDataTemplateの代わりにHierarchicalDataTemplateを使用する必要があります。HDTのコンテンツがヘッダーになり、ItemsSourceを使用して子ノードが作成されます。これにより、レベル数を動的にすることもできます。

TreeViewはWPFに組み込まれており、SDKの一部としてSilverlightで利用できます。

于 2009-12-07T23:24:21.693 に答える