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

如何用List<T>填充MudBlazor TreeView?递归转换方案

在Blazor中用递归构建MudBlazor TreeView的树形结构

在C# Blazor项目中,需要将包含Id、Name、ParentCategoryId属性的CategoryViewModel列表,转换为MudBlazor TreeView组件所需的TreeItemData类型HashSet结构。此前尝试的递归方法未达预期,嵌套组件方案适配性较差,最终通过调整递归逻辑,实现了动态构建未知层级树形结构的可行方案,核心代码如下:

private void BuildTree()
{
    if (Categories != null)
    {
        TreeItems = new HashSet<TreeItemData>();
        var subItems = Categories.Where(item => item.ParentCategoryId == null);
        foreach (var item in subItems)
        {
            BuildTreeItem(item, null);
        } 
    }
}

private void BuildTreeItem(CategoryViewModel categoryItem, TreeItemData? data)
{
    if (Categories != null)
    {
        var treeItem = new TreeItemData(categoryItem.Name ?? string.Empty, Icons.Material.Filled.AccountCircle);
        var subItems = Categories.Where(item => item.ParentCategoryId == categoryItem.Id);
        foreach (var subItem in subItems)
        {
            BuildTreeItem(subItem, treeItem);
        }
        if (data is null)
            TreeItems.Add(treeItem);
        else
            data.TreeItems.Add(treeItem); 
    }
}

逻辑说明

  • BuildTree:初始化根节点集合,筛选出所有顶级分类(ParentCategoryId为null的项),逐个触发递归构建子节点
  • BuildTreeItem:创建当前分类对应的TreeItemData实例,递归查找并构建该分类下的所有子分类节点;如果是顶级节点则加入根集合,否则作为子节点添加到父节点的子项集合中

内容的提问来源于stack exchange,提问作者David.Warwick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 23:18:18