将子项和父项的平展列表到树视图层次结构

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,了解如何开始枚举树以创建项目。

【讨论】:

它创造了奇迹。谢谢!

以上是关于将子项和父项的平展列表到树视图层次结构的主要内容,如果未能解决你的问题,请参考以下文章

如何将父项的第一个子项中的属性移动到 XSLT 中的父项?

在SQL层次结构数据中移动父AND子项

PySide Qt 在叶项处插入行并更新视图

php facetwp索引仅指导父项的子项

php facetwp索引仅指导父项的子项

如何查找非间接/嵌套父项的子项