具有导航属性EntityFramework的TreeView HierarchicalDataTemplate

时间:2012-08-30 13:29:14

标签: entity-framework treeview

我有三个链接的实体(Categories-> Types-> Classes),具有一对多的关系。 是否可以仅使用导航属性和HierarchicalDataTemplate绑定“类别”实体并表示其余实体?
我想象这样的事情:

<TreeView ItemsSource="{Binding Categories}">

            <TreeView.ItemTemplate>

                <HierarchicalDataTemplate ItemsSource="{Binding Categories}" >
                    <TextBlock Foreground="Red" Text="{Binding Types}" />

                    <HierarchicalDataTemplate.ItemTemplate>
                        <HierarchicalDataTemplate ItemsSource="{Binding Classes}">
                            <TextBlock Text="{Binding TypeName}" />

                            <HierarchicalDataTemplate.ItemTemplate>
                                <DataTemplate >
                                    <TextBlock Text="{Binding ClassName}" />
                                </DataTemplate>
                            </HierarchicalDataTemplate.ItemTemplate>

                        </HierarchicalDataTemplate>

                    </HierarchicalDataTemplate.ItemTemplate>

                </HierarchicalDataTemplate>
            </TreeView.ItemTemplate>

        </TreeView>

1 个答案:

答案 0 :(得分:1)

我最近在WPF项目中完成了这项工作,我更新了类型以匹配您的名称和导航属性。

您可能需要考虑将Type / Class更改为更具体的内容,因为它们在c#语言中用作关键字,但我认为您明白了这一点

  <!-- The Root Category Table -->
           <HierarchicalDataTemplateDataType="{x:Type Entities1:Categories}" ItemsSource="{Binding Types}" >
              <StackPanel Orientation="Horizontal">
                 <Image Name="img" Source="{Binding ., Converter={Converters:DataTypeImageConverter}}" />
                 <TextBlock Text="{Binding CategoryName}" FontWeight="Bold" />
              </StackPanel>
           </HierarchicalDataTemplate>
           <!-- Your Type Table -->
           <HierarchicalDataTemplate DataType="{x:Type Entities1:Type}"  ItemsSource="{Binding Classes}" >
              <StackPanel Orientation="Horizontal">
                 <Image Name="img" Source="{Binding ., Converter={Converters:DataTypeImageConverter}}" />
                 <TextBlock  Text="{Binding TypeName}" />
              </StackPanel>
           </HierarchicalDataTemplate>
           <!-- Your Class Table-->
           <DataTemplate DataType="{x:Type Entities1:Class}">
              <StackPanel Orientation="Horizontal">
                 <Image Name="img" Source="{Binding ., Converter={Converters:DataTypeImageConverter}}" />
                 <TextBlock Text="{Binding ClassName}" />
              </StackPanel>
           </DataTemplate>

这将是什么,它将匹配树中的数据类型 - 如果它匹配Category,它将创建堆栈面板,然后使用导航集合Types启动另一个分支。

对于types,它将执行相同的基本操作 - 为该项创建面板,然后为其导航集Class创建另一个分支。

如果是class,它只会创建面板,因为它是DataTemplate,而不是HierarchicalDataTemplate