0

HierarchicalDataTemplate のヘルプが必要です...次のような階層データを表示する TreeView を構築しようとしています。

  • RuleSet <- (ルート) -RuleA
    • ルールB
      • ルールC
      • ルールA .....
    • 支配

RuleA、... は、

  • タイプ
  • RuleBase[] ルール

RuleSet には

  • 名前
  • リスト

私が得る限り私のコード:

<TreeView x:Name="ruleSetTree" Margin="0,10,0,0" ItemsSource="{Binding Path=SelectedTypeRuleSet>
            <TreeView.ItemTemplate>
                <HierarchicalDataTemplate  DataType="{x:Type engine:RuleSet}">
                    <HierarchicalDataTemplate.ItemTemplate>
                        <HierarchicalDataTemplate x:Name="leafTemplate"
                              ItemsSource="{Binding Path=Rules}" 
                              DataType="{x:Type engine:RuleBase}">
                            <TextBlock Text="{Binding Path=Name}"/>
                        </HierarchicalDataTemplate>
                    </HierarchicalDataTemplate.ItemTemplate>
                    <TextBlock x:Name="hierarchyItem" Text="{Binding Path=TargetType}"/>
                </HierarchicalDataTemplate>
            </TreeView.ItemTemplate>
 </TreeView>

今表示されているのは、RuleSet の名前です。TreeView のトグル ボタンを非表示にします。xml を RuleSet モデルにデシリアライズして、この TreeView のデータを取得します。RuleSet は正しく入力されています...誰か手を貸してくれませんか?

ありがとうございました!

4

2 に答える 2

0

ItemsSource最初に指定はありませんHierarchicalDataTemplateListあなたのプロパティにバインドするべきではありませんRuleSetか?

于 2012-05-09T13:38:15.740 に答える
0

別の階層データ テンプレートを既存のテンプレートにネストするのはなぜですか? それは間違いかもしれません。特に、最初のデータ テンプレートで ItemSource を指定しなかったためです。すべてのノードがタイプの場合、次のRuleSetように実行できます。

<TreeView x:Name="ruleSetTree" Margin="0,10,0,0" ItemsSource="{Binding Path=SelectedTypeRuleSet>
        <TreeView.ItemTemplate>
            <HierarchicalDataTemplate DataType="{x:Type engine:RuleSet}"
                                      ItemsSource="{Binding Path=Rules}">
                <StackPanel>
                    <TextBlock Text="{Binding Path=Name}"/>
                    <TextBlock Text="{Binding Path=TargetType}"/>
                </StackPanel>
            </HierarchicalDataTemplate>
        </TreeView.ItemTemplate>
</TreeView>

更新: これは更新されたバージョンで、要件に一致する必要があります。ただし、すべての子ノードがタイプの場合、これは機能しますRuleBase

<UserControl.Resources>
        <HierarchicalDataTemplate x:Key="RuleBaseTemplate"
                                  ItemsSource="{Binding Rules}">
            <TextBlock Text="{Binding Name}"/>
        </HierarchicalDataTemplate>

        <HierarchicalDataTemplate x:Key="RuleSetTemplate" 
                                  ItemsSource="{Binding Rules}" 
                                  ItemTemplate="{StaticResource RuleBaseTemplate}">
            <StackPanel>
                <TextBlock Text="{Binding Name}"/>
                <TextBlock Text="{Binding TargetType}"/>
            </StackPanel>
        </HierarchicalDataTemplate>
</UserControl.Resources>
<!-- rest of the code -->
<TreeView x:Name="ruleSetTree" Margin="0,10,0,0" 
          ItemsSource="{Binding SelectedTypeRuleSet}"
          ItemTemplate="{StaticResource RuleSetTemplate}"/>
于 2012-05-09T23:20:28.523 に答える