2012-02-28 89 views
3

我是新來的WPF和EF;我看過,但我無法找到適當的幫助。TreeView和實體框架綁定


這是我有:

實體框架ReportDefinition.ParentIDReportDefinition.SectionIDSection.idSections),ReportDefinition例如斷面例

這是我想什麼來呈現:

的TreeView

Diagram Picture


我試圖通過編程實現。我非常感謝任何幫助。

回答

3

你需要頂級ReportDefinition對象的集合:

TopLevelReportDefinitions = ReportDefinitions.Where(rd => rd.ParentID == 0) 

你需要這個集合綁定到TreeViewItemsSource

在EF中,還需要在ReportDefinition上使用ParentID將孩子鏈接到父母上,以創建父子關係。爲方便起見,您可以命名反向收集Children。正下方另一個ReportDefinitionReportDefinition對象的集合是那麼集合:

ReportDefinition.Children 

那麼你必須在TreeView創建HierarchicalTemplate

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

感謝您的答覆,馬丁。這是我做的:'使用(var上下文=新reportEntities(entityConnectionString)){var TopLevelReportDefinitions =上下文.ReportDefinitions.Where(rd => rd.ParentID == 0); tvReport.ItemsSource = TopLevelReportDefinitions.ToList(); }'我也將建議的模板添加到TreeView中。不幸的是,我無法弄清楚如何創建父子關係。你能幫我解決這個問題嗎? – Yeseanul 2012-02-28 17:34:56

+0

@Yeseanul:一種選擇是在數據庫中創建關係(從ParentID到idReportDefinition的外鍵)。然後,如果您從數據庫更新模型,我期望EF爲模型中的關係創建屬性。名字不會是'Parent'和'Children',但您可以重命名它們。 – 2012-02-28 20:18:07

+0

我剛剛做到了(在數據庫中添加了一個外鍵並更新了模型),但沒有成功。我最終擴展了EF創建的公共部分類ReportDefinition:EntityObject;所以我添加了一個屬性'公共IList

GetChildren'。我也相應地更改了模板''。這種方法確實提供了一些結果:TreeView只顯示孩子,但不顯示父母。另一個問題是,這並沒有顯示大孩子,大孩子......對此有何看法? – Yeseanul 2012-02-28 23:51:15