You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF XAML中如何将TreeView与对象数据绑定并按部门分组?

WPF TreeView 按部门分组展示学生数据解决方案

没问题,我帮你搞定这个WPF TreeView的分组展示需求!咱们分两步来:先把扁平的学生列表转成树形结构的数据源,再配置TreeView的模板实现层级展示。

1. 整理树形数据源

首先咱们需要一个用于分组的ViewModel类,用来表示每个部门及其下属的学生:

public class DepartmentGroup
{
    public string DepartmentName { get; set; }
    public List<Student> Students { get; set; }
}

然后用LINQ把你的List<Student>按Department分组,转换成List<DepartmentGroup>:

// 假设你已经初始化好Students列表
List<DepartmentGroup> groupedDepartments = Students
    .GroupBy(s => s.Department)
    .Select(g => new DepartmentGroup
    {
        DepartmentName = g.Key,
        Students = g.ToList()
    })
    .ToList();

2. 配置TreeView的XAML模板

接下来在XAML里给TreeView设置HierarchicalDataTemplate,分别定义父节点(部门)和子节点(学生)的展示样式:

<TreeView x:Name="StudentTreeView">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Students}">
            <!-- 父节点:加粗显示部门名称 -->
            <TextBlock Text="{Binding DepartmentName}" FontWeight="Bold"/>
            <!-- 子节点:展示学生姓名+编码 -->
            <HierarchicalDataTemplate.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding StringFormat='{0} {1}', Path=studentname, Path=code}"/>
                </DataTemplate>
            </HierarchicalDataTemplate.ItemTemplate>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

3. 绑定数据源到TreeView

最后在代码里把分组后的数据源绑定到TreeView:

StudentTreeView.ItemsSource = groupedDepartments;

这样运行后,TreeView就会完全按照你想要的结构展示:

  • A
    John 1
    Rocky 4
    Donald 6
  • B
    Tonny 2
  • C
    Jai 3
    Mickey 5

小提示:如果你的项目遵循MVVM模式,建议把groupedDepartments作为ViewModel的一个公开属性,通过数据绑定的方式关联TreeView的ItemsSource,这样会更符合MVVM的设计规范哦~

内容的提问来源于stack exchange,提问作者Ovais Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:33:38