实现效果:

  1. Menu与ListView都进行数据模板绑定,分层显示数据

clipboard.png

clipboard.png

关键字:

  1. HierarchicalDataTemplate
  2. : 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"));

扩展:

  1. 示例中,ListLeagueList 是 League 对象的列表。 每个 League 对象都有一个 Name 和 Division 对象的集合。 每个 Division 都有一个 Name 和 Team 对象的集合,并且每个 Team 对象都有一个 Name。
  2. 通过使用 HierarchicalDataTemplate,您可以轻松地显示包含其他列表的列表数据。
  3. List<T> 类:表示可通过索引访问的对象的强类型列表。 提供用于对列表进行搜索、排序和操作的方法。

绑定后若需动态添加或删除子项,建议继承ObservableCollection<T>
继承的话一般有:

public League this[string name] => this.FirstOrDefault(l => l.Name == name);

李志玮
22 声望34 粉丝

求索~~


引用和评论

0 条评论