protected override TreeViewItem BuildRoot() { FolderTreeViewItem root = new FolderTreeViewItem { id = 0, depth = -1, displayName = "Root" }; var rows = GetFolderRows(); if (allPath == null) { return(root); } foreach (var p in allPath) { string[] items = p.Split('/'); string fullPath = ""; for (int i = 0; i < items.Length; i++) { string displayName = items[i]; if (string.IsNullOrEmpty(fullPath)) { fullPath = displayName; } else { fullPath += "/" + displayName; } bool isDirectory = !(i == (items.Length - 1)); bool isHaveItem = false; foreach (var item in rows) { if (item.fullPath == fullPath && item.isDirectory == isDirectory) { isHaveItem = true; break; } } if (!isHaveItem) { FolderTreeViewItem temp = new FolderTreeViewItem(index, i, displayName, fullPath, isDirectory); string dir = Path.GetDirectoryName(fullPath); FolderTreeViewItem parent = null; foreach (var item in rows) { if (item.fullPath == dir && item.isDirectory) { parent = item; break; } } if (parent != null) { parent.AddChild(temp); } else { root.AddChild(temp); } rows.Add(temp); index++; } } } List <TreeViewItem> list = new List <TreeViewItem>(); foreach (var item in rows) { list.Add(item); } //SetupParentsAndChildrenFromDepths(root, list); foreach (var item in rows) { if (item.hasChildren) { item.icon = folderIcon; } else { item.icon = fileIcon; } } return(root); }