0

我需要一些有关 HierarchicalDataTemplate 的帮助...我正在尝试构建一个 TreeView 来显示一些这样的分层数据:

  • 规则集 <- (根) -RuleA
    • 规则B
      • 规则C
      • 规则A ...
    • 规则D

RuleA, ... 派生自具有

  • 类型
  • RuleBase[] 规则

规则集有

  • 姓名
  • 列表

据我所知,我的代码:

<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指定HierarchicalDataTemplate。你不应该把它绑定到你的List属性上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 回答