3
我是新來的WPF和EF;我看過,但我無法找到適當的幫助。TreeView和實體框架綁定
這是我有:
實體框架(ReportDefinition.ParentID和ReportDefinition.SectionID是Section.idSections),ReportDefinition例如和斷面例 。
這是我想什麼來呈現:
的TreeView。
。
我試圖通過編程實現。我非常感謝任何幫助。
我是新來的WPF和EF;我看過,但我無法找到適當的幫助。TreeView和實體框架綁定
這是我有:
實體框架(ReportDefinition.ParentID和ReportDefinition.SectionID是Section.idSections),ReportDefinition例如和斷面例 。
這是我想什麼來呈現:
的TreeView。
。
我試圖通過編程實現。我非常感謝任何幫助。
你需要頂級ReportDefinition
對象的集合:
TopLevelReportDefinitions = ReportDefinitions.Where(rd => rd.ParentID == 0)
你需要這個集合綁定到TreeView
的ItemsSource
。
在EF中,還需要在ReportDefinition
上使用ParentID
將孩子鏈接到父母上,以創建父子關係。爲方便起見,您可以命名反向收集Children
。正下方另一個ReportDefinition
ReportDefinition
對象的集合是那麼集合:
ReportDefinition.Children
那麼你必須在TreeView
創建HierarchicalTemplate
:
<TreeView ItemsSource="{Binding TopLevelReportDefinitions}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Name}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
感謝您的答覆,馬丁。這是我做的:'使用(var上下文=新reportEntities(entityConnectionString)){var TopLevelReportDefinitions =上下文.ReportDefinitions.Where(rd => rd.ParentID == 0); tvReport.ItemsSource = TopLevelReportDefinitions.ToList(); }'我也將建議的模板添加到TreeView中。不幸的是,我無法弄清楚如何創建父子關係。你能幫我解決這個問題嗎? – Yeseanul 2012-02-28 17:34:56
@Yeseanul:一種選擇是在數據庫中創建關係(從ParentID到idReportDefinition的外鍵)。然後,如果您從數據庫更新模型,我期望EF爲模型中的關係創建屬性。名字不會是'Parent'和'Children',但您可以重命名它們。 – 2012-02-28 20:18:07
我剛剛做到了(在數據庫中添加了一個外鍵並更新了模型),但沒有成功。我最終擴展了EF創建的公共部分類ReportDefinition:EntityObject;所以我添加了一個屬性'公共IList GetChildren'。我也相應地更改了模板''。這種方法確實提供了一些結果:TreeView只顯示孩子,但不顯示父母。另一個問題是,這並沒有顯示大孩子,大孩子......對此有何看法? –
Yeseanul
2012-02-28 23:51:15