2012-02-28 9 views
3

私はWPFとEFを初めて使用しています。私は見ましたが、私は適切なヘルプを見つけることができませんでした。TreeViewとEntity Frameworkバインディング


これは私が持っているものです。たとえば

Entity FrameworkのをReportDefinition.ParentIDとSection.idSectionsあるReportDefinition.SectionID)、ReportDefinitionの例節。

ツリービューを:

これは私が提示したいものです。

Diagram Picture


私はこれをプログラム的に達成しようとしています。私は何か助けていただければ幸いです。

答えて

3

あなたはトップレベルReportDefinitionオブジェクトのコレクションを必要とする:

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

あなたはTreeViewItemsSourceにこのコレクションをバインドする必要があります。

EFでは、ParentIDを使用して子を親にリンクするReportDefinitionに親子関係を作成する必要があります。便宜上、反転コレクションの名前はChildrenとすることができます。

ReportDefinition.Children 

あなたはその後、TreeViewHierarchicalTemplateを作成する必要があります:返信、マーティンのため

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

おかげで、直接別のReportDefinition以下ReportDefinitionオブジェクトのコレクションは、コレクションです。これは私がやったことです: '(var context = new reportEntities(entityConnectionString)){var TopLevelReportDefinitions = context.ReportDefinitions.Where(rd => rd.ParentID == 0); tvReport.ItemsSource = TopLevelReportDefinitions.ToList(); } 'また、提案されたテンプレートをTreeViewに追加しました。残念ながら、私は親子関係を作成する方法を理解することができません。これで私を助けてくれますか? – Yeseanul

+0

@Yeseanul:1つのオプションは、データベースに関係を作成することです(ParentIDからidReportDefinitionへの外部キー)。その後、データベースからモデルを更新すると、モデル内のリレーションのプロパティをEFが作成することが期待されます。名前は 'Parent'と' Children'ではなく、名前を変更することができます。 –

+0

私はちょうど(データベースに外部キーを追加してモデルを更新しましたが)成功しませんでした。私はEFが作成した 'public partial class ReportDefinition:EntityObject'を拡張しました。私はプロパティ 'public IList

GetChildren'を追加しました。それに応じてテンプレートを変更しました。。このアプローチではいくつかの結果が得られます。ツリービューには子のみが表示されますが、親は親を表示しません。もう一つの問題は、これはグランド・グランデ、グランド・グラン・チルドレンを表示していないということです。これについて何か考えていますか? – Yeseanul

関連する問題