HierarchicalDataTemplate类专用于HeaderedItemsControl 类型以显示这样的数据。在下面的示例中,LeagueList 是 League 对象的列表。 每个 League 对象都有一个 Name 和 Division 对象的集合。每个 Division 都有一个 Name 和 Team 对象的集合,并且每个Team 对象都有一个Name。
XAML:
<Window x:Class="HierarchicalDataTemplate_Test01.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:HierarchicalDataTemplate_Test01"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.Resources>
<local:LeagueList x:Key="MyList"/>
<!-- 注意DataType的用处 -->
<HierarchicalDataTemplate DataType = "{x:Type local:League}" ItemsSource = "{Binding Path=Divisions}">
<TextBlock Text="{Binding Path=Name}"/>
</HierarchicalDataTemplate>
<!-- 注意DataType的用处 -->
<HierarchicalDataTemplate DataType = "{x:Type local:Division}" ItemsSource = "{Binding Path=Teams}">
<TextBlock Text="{Binding Path=Name}"/>
</HierarchicalDataTemplate>
<!-- 注意DataType的用处 -->
<DataTemplate DataType="{x:Type local:Team}">
<TextBlock Text="{Binding Path=Name}"/>
</DataTemplate>
</Grid.Resources>
<TreeView>
<TreeViewItem ItemsSource="{Binding Source={StaticResource MyList}}" Header="My Soccer Leagues" />
</TreeView>
</Grid>
</Window>
C#(后台代码):
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
public class LeagueList : ObservableCollection<League>
{
public LeagueList()
: base()
{
Add(
new League {
Name = "League-0",
Divisions = new ObservableCollection<Division> {
new Division {
Name = "League-0_Division-0",
Teams = new ObservableCollection<Team> {
new Team { Name = "League-0_Division-0_team-0"},
new Team { Name = "League-0_Division-0_team-1"}
}
},
new Division {
Name = "League-0_Division-1",
Teams = new ObservableCollection<Team> {
new Team { Name = "League-0_Division-1_team-0"},
new Team { Name = "League-0_Division-1_team-1"},
new Team { Name = "League-0_Division-1_team-2"}
}
}
}
}
);
Add(
new League
{
Name = "League-1",
Divisions = new ObservableCollection<Division> {
new Division {
Name = "League-1_Division-0",
Teams = new ObservableCollection<Team> {
new Team { Name = "League-1_Division-0_team-0"},
new Team { Name = "League-1_Division-0_team-1"},
new Team { Name = "League-1_Division-0_team-2"},
new Team { Name = "League-1_Division-0_team-3"}
}
},
new Division {
Name = "League-1_Division-1",
Teams = new ObservableCollection<Team> {
new Team { Name = "League-1_Division-1_team-0"},
new Team { Name = "League-1_Division-1_team-1"}
}
},
new Division {
Name = "League-1_Division-2",
Teams = new ObservableCollection<Team> {
new Team { Name = "League-1_Division-2_team-0"},
new Team { Name = "League-1_Division-2_team-1"}
}
}
}
}
);
}
}
public class League
{
public string Name { get; set; }
public ObservableCollection<Division> Divisions { get; set; }
}
public class Division
{
public string Name { get; set; }
public ObservableCollection<Team> Teams { get; set; }
}
public class Team
{
public string Name { get; set; }
}