将子项和父项的平展列表到树视图层次结构
Posted
技术标签:
【中文标题】将子项和父项的平展列表到树视图层次结构【英文标题】:Flattened list of child and parents to a tree view hierarchy 【发布时间】:2021-11-23 05:06:39 【问题描述】:我有一个如下所示的对象列表:
public class Folders
public string name get; set;
public string description get; set;
public string path get; set;
public string id get; set;
public AccessType accessType get; set;
这些对象都是从一个非常丑陋的 JSON 中解析出来的,我已经设法将列表缩小到这个。
我遇到的问题是我需要使用 WPF 创建一个树视图,但现在我在将层次结构创建到树中时遇到了问题。
path
属性具有该特定文件夹的路径。
这是 JSON。
"name": "DataRoot",
"description": "Root data directory node",
"path": "DataRoot",
"id": "00000000-0000-0000-0000-000000000000",
"children": [
"name": "Second folder",
"description": "Second folder",
"path": "Second folder",
"id": "00000000-0000-0000-0000-000000000001",
"children": [
"name": "Third Folder",
"description": "Third Folder",
"path": "Second folder/Third Folder",
"id": "00000000-0000-0000-0000-000000000002",
"children": [
"name": "Fourth Folder",
"description": "Fourth Folder",
"path": "Second folder/Third Folder/Fourth Folder",
"id": "00000000-0000-0000-0000-000000000003",
"accessType":
"read": true,
"write": true
,
"children": []
]
,
"name": "Fifth Folder",
"description": "Review Required",
"path": "Second folder/Fifth Folder,
"id": "00000000-0000-0000-0000-000000000003",
"children": []
,
"name": "Sixth Folder",
"description": "Sixth Folder",
"path": "Second folder/Sixth Folder",
"id": "00000000-0000-0000-0000-000000000004",
"children": [
"name": "Seventh Folder",
"description": "Seventh Folder",
"path": "Second folder/Sixth Folder/Seventh Folder",
"id": "00000000-0000-0000-0000-000000000005",
"children": []
]
]
]
我似乎无法开发一种算法来使树文件夹中的层次结构...
我正在考虑充分利用path
属性,但我仍然找不到使用它的好方法,以便我可以使树看起来像它应该的那样。
正如我所说的,我的列表是扁平的,但现在我不知道什么是开发层次结构的好算法。
谢谢,请帮忙:)
【问题讨论】:
【参考方案1】:我需要使用 WPF 创建树视图
必须枚举 json 节点(JsonElement
,如果使用 System.Text.Json)并通过创建 TreeViewItems
将它们添加到 WPF TreeView
中,具体方法是根据当时发现自己的节点级别。
所以不是快速回答这个问题的地方。
我编写了一个基本的 WPF JSON Treeview 作为 .Net Core WPF 控件,可以作为 Nuget 包安装。安装后,看看它是否扁平化你想要的外观。
如果没有,请查看我的 Github 存储库,看看是否有示例可供您作为工作的基础。 (你有更新的代码建议吗,请加入项目并提交 PR)。
示例代码
JSONTreeview Nuget Package查看如何轻松运行它的页面。 JSON-Framework/JSONTreeView GitHub source 查看TreeViewExtension.ProcessJson
,了解树和包如何协同工作以创建树。
查看JsonExtensions.cs
,了解如何开始枚举树以创建项目。
【讨论】:
它创造了奇迹。谢谢!以上是关于将子项和父项的平展列表到树视图层次结构的主要内容,如果未能解决你的问题,请参考以下文章