TreeViewItem добавление узлов

#c# #wpf

#c# #wpf

Вопрос:

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

открытый класс CSTree { открытый класс CS_TREE { int NodeID; int ParentID, строковое описание; открытый CS_TREE(int node, int parent, string desc) { NodeID = node; ParentID = parent; description = desc; } открытый int NodeID { get { return NodeID;} открытый int ParentID { get { return NodeID;} открытый int ParentID { get { returnParentID;} public int Описание { получить { вернуть описание;} }

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 amp;amp; 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; } }

}

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

Ответ №1:

Вам нужно вернуть найденный узел. Поэтому вместо

 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"),