WPF分级数据显示(集合包含其他集合)

关键字:HierarchicalDataTemplate



HierarchicalDataTemplate类专用于HeaderedItemsControl 类型以显示这样的数据。在下面的示例中,LeagueListLeague 对象的列表。 每个 League 对象都有一个 Name Division 对象的集合。每个 Division 都有一个 NameTeam 对象的集合,并且每个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; }
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值