2

次のようなDBがあります。

Locations         [rootlevel]
   Inspections    [level1]
   Areas          [level1]
      Inspections [level2]

したがって、各ロケーションにはゼロ以上の検査とゼロ以上のエリアを含めることができ、エリアにはゼロ以上の検査を含めることができます。Inspections のすべてのレコードには、この階層を取得するための LocationID!=null と AreaID=null または !=null があります。

テーブル内の各項目のすべての名前をツリービューでナビゲーションとして取得したいと思います。これまでのところ、どちらかを取得できます

ロケーション --> エリア --> インスペクション OR

場所-->検査

必要なものを表示するためのツリービュー階層を取得できないようです。出来ますか?ネストされたツリービューを階層内のアイテムとして使用して、必要なものを表示しようとしましたが、正しく機能しません。

Locations--> Areas--> Inspections の xaml コード

 <!--NAVIGATION TREE HIERARCHICAL TEMPLATE-->
    <common:HierarchicalDataTemplate x:Key="AssetManager" ItemsSource="{Binding Path=Areas}">

        <!--START OF AREA OPTIONS TEMPLATE-->
        <common:HierarchicalDataTemplate.ItemTemplate>
            <common:HierarchicalDataTemplate ItemsSource="{Binding Path=Inspections}">

                <!--START OF INSPECTION OPTIONS TEMPLATE-->
                <common:HierarchicalDataTemplate.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <Image Source="Assets/Resources/ImageResources/SearchICON2.png" Height="20" Width="20" />
                            <TextBlock Margin="0,0,0,0" Text="{Binding Path=Name}"/>
                        </StackPanel>
                    </DataTemplate>
                </common:HierarchicalDataTemplate.ItemTemplate>
                <!--END OF INSPECTION OPTIONS TEMPLATE-->

                <StackPanel Orientation="Horizontal">
                    <Image Source="Assets/Resources/ImageResources/ManufacturingICON.png" Width="20" Height="20"/>
                    <TextBlock Margin="0,0,0,0" Text="{Binding Path=Name}"/>
                </StackPanel>
            </common:HierarchicalDataTemplate>
        </common:HierarchicalDataTemplate.ItemTemplate>
        <!--END OF AREA OPTIONS TEMPLATE-->


            <StackPanel Orientation="Horizontal">
                    <Image Source="Assets/Resources/ImageResources/ManufacturingICON.png" Width="20" Height="20"/>
                    <TextBlock Margin="0,0,0,0" Text="{Binding Path=Name}"/>                    
          </StackPanel>     
    </common:HierarchicalDataTemplate>
    <!--END OF NAVIGATION TEMPLATE-->

ロケーションの xaml --> インスペクション

 <!--NAVIGATION TREE HIERARCHICAL TEMPLATE-->
    <common:HierarchicalDataTemplate x:Key="AssetManager" ItemsSource="{Binding Path=Inspections}">
            <StackPanel Orientation="Horizontal">
                    <Image Source="Assets/Resources/ImageResources/ManufacturingICON.png" Width="20" Height="20"/>
                    <TextBlock Margin="0,0,0,0" Text="{Binding Path=Name}"/>
                </StackPanel>
            </common:HierarchicalDataTemplate>
        </common:HierarchicalDataTemplate.ItemTemplate>
        <!--END OF TEMPLATE-->

ネストされたツリービューの xaml

 <!--NAVIGATION TREE HIERARCHICAL TEMPLATE-->
    <common:HierarchicalDataTemplate x:Key="AssetManager" ItemsSource="{Binding Path=Areas}">

        <!--START OF AREA OPTIONS TEMPLATE-->
        <common:HierarchicalDataTemplate.ItemTemplate>
            <common:HierarchicalDataTemplate ItemsSource="{Binding Path=Inspections}">

                <!--START OF INSPECTION OPTIONS TEMPLATE-->
                <common:HierarchicalDataTemplate.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <Image Source="Assets/Resources/ImageResources/SearchICON2.png" Height="20" Width="20" />
                            <TextBlock Margin="0,0,0,0" Text="{Binding Path=Name}"/>
                        </StackPanel>
                    </DataTemplate>
                </common:HierarchicalDataTemplate.ItemTemplate>
                <!--END OF INSPECTION OPTIONS TEMPLATE-->

                <StackPanel Orientation="Horizontal">
                    <Image Source="Assets/Resources/ImageResources/ManufacturingICON.png" Width="20" Height="20"/>
                    <TextBlock Margin="0,0,0,0" Text="{Binding Path=Name}"/>
                </StackPanel>
            </common:HierarchicalDataTemplate>
        </common:HierarchicalDataTemplate.ItemTemplate>
        <!--END OF AREA OPTIONS TEMPLATE-->

        <StackPanel Orientation="Vertical">                         
                            <StackPanel Orientation="Horizontal">
                    <Image Source="Assets/Resources/ImageResources/ManufacturingICON.png" Width="20" Height="20"/>
                    <TextBlock Margin="0,0,0,0" Text="{Binding Path=Name}"/>                    
                </StackPanel>
                            <sdk:TreeView HorizontalAlignment="Left" ItemsSource="{Binding Source={StaticResource locationInspectionsViewSource}}" Name="inspectionsTreeView" VerticalAlignment="Top" ItemTemplate="{StaticResource Level2}" BorderBrush="{x:Null}" Background="{x:Null}"/>                                         
                    </StackPanel>
    </common:HierarchicalDataTemplate>
    <!--END OF NAVIGATION TEMPLATE-->

ありがとうございました

4

1 に答える 1

2

多くの調査、髪の引っ張り、ヘッドデスクの結果、次のことがわかりました。

いいえ、HierarchicalDataTemplate を使用してネストされた TreeView 階層を表示することはできません。データ テンプレートでは、ノードごとに 1 つの「子」のみが許可されます。

1 つの解決策は、2 つのリスト項目「子」を 1 つのリスト「子」にマージし、それを階層内で使用することです。したがって、私の場合、場所は、エリアと検査エンティティが隣接する単一の「子」テーブルに関連し、各エリアは関連する検査の子に関連し、検査には子がありません。

2 つ目の解決策は、ネストされた DataGrid を使用することです。これは不正行為のように見えますが、望ましい効果が得られました。列ヘッダー/代替行の色付け/強調表示などがないように、DataGrid のテンプレートを変更する必要があります。TreeView がどのように見える必要があるかによって異なります。

2 番目の方法は、ルート テーブルに標準の DomainDataSource (すべての包含を含む) を使用するため、実際にはより簡単なオプションです。これにより、DataContext を簡単にカプセル化できます。これは、レイアウトが分離されていることを確認するためのコード ビハインドがないことも意味します。

他にも方法があるかもしれませんが、私は自分に合った簡単な解決策を見つけました。

于 2012-05-16T14:58:15.693 に答える