【问题标题】:TreeView HierarchicalDataTemplate with Navigation Properties EntityFramework具有导航属性 EntityFramework 的 TreeView HierarchicalDataTemplate
【发布时间】:2012-08-25 05:58:15
【问题描述】:

我有三个具有一对多关系的链接实体(类别->类型->类)。 是否可以仅绑定类别实体并使用导航属性和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>

【问题讨论】:

  • 那是伪代码吗?您没有设置数据类型和其他内容。 WPF还是winforms?不管怎样,从概念上讲,是的,它会起作用,但你的实现有点偏离:)
  • 谢谢,我的实施只是草稿,因为我仍在寻求可能性
  • 那么是的,你绝对可以做到!
  • 以这种方式有什么有用的前任或文章吗?或者你能用一般模式回答吗?

标签: entity-framework treeview


【解决方案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

【讨论】:

  • ——这是一个很棒的答案。但是,您如何将这些 HierarchicalDataTemplates 添加到树的 ItemsSource 中而不显示错误“ItemTemplate is set more than once”?谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多