۱۳۸۹/۰۷/۲۱

خلاصه‌اي از مبحث نمايش اطلاعات hierarchical در WPF


در اين مطلب خلاصه‌اي را در مورد نحوه‌ي نمايش اطلاعات hierarchical (سلسله مراتبي، درختي) در WPF به همراه يك سري لينك مرتبط ملاحظه خواهيد نمود.

كلاس زير را در نظر بگيريد:
using System.Collections.Generic;

namespace WpfTests.Hierarchy.Raw.Model
{
public class Person
{
private readonly List<Person> _children = new List<Person>();
public IList<Person> Children
{
get { return _children; }
}

public string Name { get; set; }
}
}
و همچنين يك ObservableCollection ساخته شده از آن‌را با مقدار دهي اوليه:
using System.Collections.ObjectModel;

namespace WpfTests.Hierarchy.Raw.Model
{
public class People : ObservableCollection<Person>
{
public People()
{
this.Add(
new Person
{
Name = "P1",
Children =
{
new Person
{
Name="P2",
Children=
{
new Person
{
Name="P3",
Children=
{
new Person
{
Name="P4",
}
}
}
}
}
}
}
);
}
}
}
قصد داريم اين اطلاعات را در يك TreeView نمايش دهيم.
روش صحيح Binding اين نوع اطلاعات در WPF استفاده از HierarchicalDataTemplate است به صورت زير :
<TreeView ItemsSource="{Binding People}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Name}" />
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>


يك سري منبع آموزشي براي آشنايي بيشتر با HierarchicalDataTemplate
Hierarchical Databinding in WPF
Binding WPF Treeview and Objects
A TreeView, a HierarchicalDataTemplate, and a 2D collection
Non-recursive WPF TreeView controls

همچنين هنگام كار با بانك‌هاي اطلاعاتي:
- يك Extension method عالي قابل استفاده در LINQ to SQL و همچنين Entity framework به نام AsHierarchy
- مثالي ديگر از كاربرد LINQ to SQL براي اين منظور
- و يا مثالي از ADO.NET و DataSets و مثالي ديگر