あなたはトップレベルReportDefinition
オブジェクトのコレクションを必要とする:
TopLevelReportDefinitions = ReportDefinitions.Where(rd => rd.ParentID == 0)
あなたはTreeView
のItemsSource
にこのコレクションをバインドする必要があります。
EFでは、ParentID
を使用して子を親にリンクするReportDefinition
に親子関係を作成する必要があります。便宜上、反転コレクションの名前はChildren
とすることができます。
ReportDefinition.Children
あなたはその後、TreeView
でHierarchicalTemplate
を作成する必要があります:返信、マーティンのため
<TreeView ItemsSource="{Binding TopLevelReportDefinitions}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Name}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
おかげで、直接別の
ReportDefinition
以下ReportDefinition
オブジェクトのコレクションは、コレクションです。これは私がやったことです: '(var context = new reportEntities(entityConnectionString)){var TopLevelReportDefinitions = context.ReportDefinitions.Where(rd => rd.ParentID == 0); tvReport.ItemsSource = TopLevelReportDefinitions.ToList(); } 'また、提案されたテンプレートをTreeViewに追加しました。残念ながら、私は親子関係を作成する方法を理解することができません。これで私を助けてくれますか? – Yeseanul@Yeseanul:1つのオプションは、データベースに関係を作成することです(ParentIDからidReportDefinitionへの外部キー)。その後、データベースからモデルを更新すると、モデル内のリレーションのプロパティをEFが作成することが期待されます。名前は 'Parent'と' Children'ではなく、名前を変更することができます。 –
私はちょうど(データベースに外部キーを追加してモデルを更新しましたが)成功しませんでした。私はEFが作成した 'public partial class ReportDefinition:EntityObject'を拡張しました。私はプロパティ 'public IList GetChildren'を追加しました。それに応じてテンプレートを変更しました。。このアプローチではいくつかの結果が得られます。ツリービューには子のみが表示されますが、親は親を表示しません。もう一つの問題は、これはグランド・グランデ、グランド・グラン・チルドレンを表示していないということです。これについて何か考えていますか? –
Yeseanul