如何用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
相关产品推荐
相关产品推荐

