我的.edmx ADO.NET实体数据模型文件中有一个带有Parent和Children属性的Page类.它适用于Pages的层次结构.
删除死了ImageShack链接 - ADO.NET实体框架分层页面类
这是在我的SQL数据库中处理的,其中Page表中的ParentId外键绑定到同一Page表的Id主键.
如何在WPF TreeView中显示此层次结构?
我得到了Abe Heidebrecht的帮助.非常感谢他.
这是我的XAML ......
这是我的Visual Basic代码......
Class Window1
Private Sub Window1_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
Dim db As New PageEntities
Dim RootPage = From p In db.Page.Include("Children") _
Where (p.Parent Is Nothing) _
Select p
TreeViewPages.ItemsSource = RootPage
End Sub
Private Sub TreeViewPages_Expanded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
Dim ExpandedTreeViewItem As TreeViewItem = DirectCast(e.OriginalSource, TreeViewItem)
Dim PageId As Guid = DirectCast(ExpandedTreeViewItem.DataContext, Page).Id
Dim db As New PageEntities
Dim ChildPages = From p In db.Page.Include("Children") _
Where p.Parent.Id = PageId _
Select p
ExpandedTreeViewItem.ItemsSource = ChildPages
End Sub
End Class
加载窗口时,将从数据库中查询根节点及其子节点并将其插入树中.
每次展开节点时,都会从数据库中查询该节点的子节点和孙子节点并将其插入到树中.
一种不同的方式:(嗯,非常相似,但略有不同)
在您的窗口加载功能中:
PageEntities db = new PageEntities(); TreeViewPages.ItemsSource = db.Page.Where(u=>u.Parent==null);
创建一个新的文件Page.cs
public partial class Page { public ObjectQueryLoadedChildren { get { var ret = Children; if(ret.IsLoaded==false) ret.Load(); return ret; } } }
在你的XAML中:
它没有经过测试,但你应该得到一般的想法.