C# TreeView和实体框架绑定

C# TreeView和实体框架绑定,c#,.net,wpf,linq,entity-framework,C#,.net,Wpf,Linq,Entity Framework,我是WPF和EF的新手;我找过了,但找不到合适的帮助 这就是我所拥有的: 实体框架(ReportDefinition.ParentID和ReportDefinition.SectionID是Section.idSections),ReportDefinition示例和Section示例 以下是我想介绍的内容: TreeView 我试图通过编程实现这一点。非常感谢您的帮助。您需要一组顶级的ReportDefinition对象: TopLevelReportDefinitions = Repo

我是WPF和EF的新手;我找过了,但找不到合适的帮助


这就是我所拥有的:

实体框架(ReportDefinition.ParentID和ReportDefinition.SectionID是Section.idSections),ReportDefinition示例Section示例

以下是我想介绍的内容:

TreeView



我试图通过编程实现这一点。非常感谢您的帮助。

您需要一组顶级的
ReportDefinition
对象:

TopLevelReportDefinitions = ReportDefinitions.Where(rd => rd.ParentID == 0)
您需要将此集合绑定到
TreeView
ItemsSource

在EF中,还需要在
ReportDefinition
上创建父子关系,使用
ParentID
将子项链接到父项。为方便起见,您可以命名反向集合
子集合
。直接位于另一个
ReportDefinition
下方的
ReportDefinition
对象的集合即为集合:

ReportDefinition.Children
然后必须在
树状视图中创建
层次结构模板

<TreeView ItemsSource="{Binding TopLevelReportDefinitions}">
  <TreeView.ItemTemplate>
    <HierarchicalDataTemplate ItemsSource="{Binding Children}">
      <TextBlock Text="{Binding Name}"/>
    </HierarchicalDataTemplate>
  </TreeView.ItemTemplate>
</TreeView>


谢谢你的回复,马丁。这就是我所做的:
使用(var context=new reportEntities(entityConnectionString)){var-TopLevelReportDefinitions=context.ReportDefinitions.Where(rd=>rd.ParentID==0);tvReport.ItemsSource=TopLevelReportDefinitions.ToList();}
我还将建议的模板添加到树视图中。不幸的是,我不知道如何创建父子关系。您能帮我解决这个问题吗?@yesanul:一个选项是在数据库中创建关系(从ParentID到idReportDefinition的外键)。然后,如果从数据库更新模型,我希望EF为模型中的关系创建属性。这些名称将不会是
Parent
Children
,但您可以重命名它们。我只是这样做了(在数据库中添加了一个外键并更新了模型),但没有成功。我最终扩展了EF创建的
公共部分类ReportDefinition:EntityObject
;因此,我添加了一个属性
public-IList-GetChildren
。我还相应地更改了模板
。这种方法确实提供了一些结果:树视图只显示孩子,而不显示家长。另一个问题是,这并没有显示孙子孙女。。。有什么想法吗?好的,问题解决了。我所做的是将两个属性添加到EF
public partial class ReportDefinition创建的类中:EntityObject
public IList Children
public string Name
。这适用于答案中提供的XML。谢谢您的帮助。@UB3571公共部分类报告定义:EntityObject
由EF生成。作为部分类,您可以对其进行扩展。因此,在您的代码中,只需声明一个
公共部分类ReportDefinition
,并向其中添加您想要/需要的内容。在我的例子中,就是上面提到的两个属性(我添加了更多的属性,但这两个属性帮助解决了我遇到的问题)。