实现效果:
- Menu与ListView都进行数据模板绑定,分层显示数据
关键字:
- HierarchicalDataTemplate
- : List<League>
代码:
xaml:
每层对应一个对象的列表
<DockPanel.Resources>
<local:ListLeagueList x:Key="MyList"/>
<HierarchicalDataTemplate DataType = "{x:Type local:League}"
ItemsSource = "{Binding Path=Divisions}">
<TextBlock Text="{Binding Path=Name}"/>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType = "{x:Type local:Division}"
ItemsSource = "{Binding Path=Teams}">
<TextBlock Text="{Binding Path=Name}"/>
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type local:Team}">
<TextBlock Text="{Binding Path=Name}"/>
</DataTemplate>
</DockPanel.Resources>
绑定数据源的构成
public class ListLeagueList : List<League>
{
public ListLeagueList()
{
League l;
Division d;
Add(l = new League("League A"));
l.Divisions.Add((d = new Division("Division A")));
d.Teams.Add(new Team("Team I"));
d.Teams.Add(new Team("Team II"));
d.Teams.Add(new Team("Team III"));
d.Teams.Add(new Team("Team IV"));
d.Teams.Add(new Team("Team V"));
l.Divisions.Add((d = new Division("Division B")));
d.Teams.Add(new Team("Team Blue"));
扩展:
- 示例中,ListLeagueList 是 League 对象的列表。 每个 League 对象都有一个 Name 和 Division 对象的集合。 每个 Division 都有一个 Name 和 Team 对象的集合,并且每个 Team 对象都有一个 Name。
- 通过使用 HierarchicalDataTemplate,您可以轻松地显示包含其他列表的列表数据。
- List<T> 类:表示可通过索引访问的对象的强类型列表。 提供用于对列表进行搜索、排序和操作的方法。
绑定后若需动态添加或删除子项,建议继承ObservableCollection<T>
继承的话一般有:
public League this[string name] => this.FirstOrDefault(l => l.Name == name);