3

HierarchicalDataTemplate を使用して混合タイプのツリー ビューを表示しようとしていますが、これまでのところすべての試行が失敗しました..

私は、2 つの異なるタイプの子を持つことができる木のようなクラスを持っています。(場所とデバイス)。ここで物事を理解できるようにするために、私が表示しようとしているものの図を示します。

->Location 1
    |
    |--->Device 1.1
    |--->Device 1.2
    |--->Location 1.2
          |
          |---->Device 1.2.1 
          |---->Location 1.2.1
            .....etc.....

私が見つけた多くの解決策を試しましたが、どれもうまくいきませんでした。ほとんどの場合、ツリー ビューでクラス名を取得するだけです。HierarchicalDataTemplate を使用して私がやろうとしていることは可能ですか? もしそうなら、私にその方法を教えてください。

4

4 に答える 4

5

数時間の試行錯誤の後、最初に戻って解決策を見つけました。私はそれが実際にはとても簡単だとは信じられません。

テンプレートは次のようになります。

<HierarchicalDataTemplate x:Key="NavigatorDataTemplate" DataType="{x:Type local:Location}" ItemsSource="{Binding Locations}">
    <StackPanel>
        <TextBlock Text="{Binding Description}"/>
        <ListBox ItemsSource="{Binding Devices}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Description}"/>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </StackPanel>
</HierarchicalDataTemplate>

TreeView は次のとおりです。

<TreeView Name="treeNav" ItemTemplate="{StaticResource NavigatorDataTemplate}"/>

表示する必要があるコレクションは既にコードに含まれているため、ItemsSource に設定するだけです。

treeNav.ItemsSource = locations;
于 2012-08-19T14:14:40.947 に答える
1

HierarchicalDataTemplate は、問題の解決に役立つはずです。MSDNデータ テンプレートの概要に関する最新のサンプルをご覧ください。

于 2012-08-19T03:26:09.170 に答える
1

この階層を機能させるには、Locationオブジェクトがcomposite collection of Locations and Devices必要であり、そのコレクションを HierarchicalDataTemplate の ItemsSource として設定するだけです。このサンプルは動作するはずです -

<HierarchicalDataTemplate DataType="{x:Type local:Location}"
                          ItemsSource="{Binding CompositeCollection}">
   <TextBlock Text="{Binding Name}"/>
</HierarchicalDataTemplate>

<DataTemplate DataType="{x:Type local:Device}">
   <TextBlock Text="{Binding Name}"/>
</DataTemplate>

UI に表示する必要がある各オブジェクトの Location と Device に Name プロパティがあると仮定しています。これらのデータ テンプレートを、ListBox、TreeView、またはその他の ItemsControl である ItemsControl のリソースに追加します。

于 2012-08-19T07:31:49.673 に答える