首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HierarchicalDataTemplate问题

HierarchicalDataTemplate问题
EN

Stack Overflow用户
提问于 2012-05-09 11:41:48
回答 2查看 344关注 0票数 0

我需要HierarchicalDataTemplate的帮助..。我试图构建一个TreeView来显示一些分层数据,如下所示:

  • RuleC
  • RuleA .....

  • RuleSet <- (根) -RuleA
    • RuleB

代码语言:javascript
复制
- RuleD

RuleA,...派生自具有

  • Type
  • RuleBase[] Rules

RuleSet有

  • Name
  • List

据我所知,我的代码是:

代码语言:javascript
复制
<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填满了correctly...can,有人帮忙吗?

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2012-05-09 13:38:15

在第一个ItemsSource中没有指定任何HierarchicalDataTemplate。难道不应该将其绑定到RuleSetRuleSet属性吗?

票数 0
EN

Stack Overflow用户

发布于 2012-05-09 23:20:28

为什么要将另一个分层数据模板嵌套到现有的模板中?这可能是个错误。特别是因为您没有在第一个数据模板中指定ItemSource。如果所有节点都是RuleSet类型的,您可以这样做:

代码语言:javascript
复制
<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类型的,则这只起作用。

代码语言:javascript
复制
<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}"/>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10515340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档