2016-10-05 6 views
0

Моя попытка добавления узлов в WPF-представление дерева программно не работает должным образом, т. Е. Для кода ниже я ожидал, что в «C1-4» и «C14-6» будут иметь узлы листа «C14-5» и «C14-6» и "С2-4" в то время как они появляются в корневом узле "Level-0"Добавление узлов TreeViewItem

public class CSTree 
{ 
    public class CS_TREE 
    { 
     int nodeId; int parentId, string description; 
     public CS_TREE(int node, int parent, string desc) 
     { 
      nodeId = node; parentId = parent; description = desc; 
     } 
     public int NodeId { get { return nodeId;} 
     public int ParentId { get { return parentId;} 
     public int Description { get { return description;} 
    }

private static List<CS_TREE> tree = new List<CS_TREE>() new { new CS_TREE(1,0,"Level-0"), new CS_TREE(2,1,"Level-1 A"), new CS_TREE(3,1,"Level-1 B"), new CS_TREE(4,1,"Level-1 C"), new CS_TREE(5,4,"Level-2 C1-4"), new CS_TREE(6,4,"Level-2 C2-4"), new CS_TREE(7,5,"Level-3 C14-5"), new CS_TREE(7,6,"Level-3 C24-6"), } public void PopulateTreeView() { foreach (CS_TREE cst in L_tree) { AddToTree(cst); } } public void AddToTree(CS_TREE cst) { var subitem = new TreeViewItem() { Header = cst.Description, Tag = cst}; if (cst.ParentId == 0) { _rootNode = new TreeViewItem() { Header = cst.Description, Tag = cst }; } else { TreeViewItem node = FindNode(_rootNode, cst); if (node != null) { node.Items.Add(subitem); } else { _rootNode.Items.Add(subitem); } } } private TreeViewItem FindNode(TreeViewItem rootNode, CS_TREE cst) { TreeViewItem rv = null; if (rootNode != null && rootNode.HasItems) { var items = rootNode.Items; foreach (TreeViewItem item in items) { CS_TREE nodeCST = item.Tag as CS_TREE; if (nodeCST.NodeId == cst.ParentId) { return item; } else if (item.HasItems) { FindNode(item, cst); } } } return rv; } private TreeViewItem _rootNode = null; public TreeViewItem Root { get { return _rootNode; } }

}

Может читатели мне точку в правильном направлении?

ответ

0

You необходимо вернуть найденный узел. Таким образом, вместо

FindNode(item, cst); 

сделать

rv = FindNode(item, cst); 
if (rv != null) 
    return rv; 

Кроме того, вы используете один и тот же NodeId 7 в узлах "C14-5" и "C24-6".

Так что, если вы хотите любые узлы под "C24-6", вы должны написать

new CS_TREE(8,6,"Level-3 C24-6"), 
Смежные вопросы