C# TreeView和实体框架绑定
我是WPF和EF的新手;我找过了,但找不到合适的帮助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
这就是我所拥有的: 实体框架(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
。我还相应地更改了模板
。这种方法确实提供了一些结果:树视图只显示孩子,而不显示家长。另一个问题是,这并没有显示孙子孙女。。。有什么想法吗?好的,问题解决了。我所做的是将两个属性添加到EFpublic partial class ReportDefinition创建的类中:EntityObject
:public IList Children
和public string Name
。这适用于答案中提供的XML。谢谢您的帮助。@UB3571公共部分类报告定义:EntityObject
由EF生成。作为部分类,您可以对其进行扩展。因此,在您的代码中,只需声明一个公共部分类ReportDefinition
,并向其中添加您想要/需要的内容。在我的例子中,就是上面提到的两个属性(我添加了更多的属性,但这两个属性帮助解决了我遇到的问题)。