【发布时间】:2017-02-14 01:01:18
【问题描述】:
我以编程方式将节点添加到 WPF 树视图的尝试没有按预期工作,即对于下面的代码,我希望在“C1-4”和“C2-”下有叶节点“C14-5 和“C14-6” 4”,而它们出现在根节点“Level-0”下
公共类 CSTree
{
公共类 CS_TREE
{
整数节点ID; int parentId,字符串描述;
公共 CS_TREE(int 节点,int 父级,字符串 desc)
{
nodeId = 节点;父母 ID = 父母;描述=描述;
}
公共 int NodeId { 获取 { 返回 nodeId;}
公共 int ParentId { 获取 { 返回 parentId;}
公共 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 && 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; }
}
}
读者能否指出我正确的方向?
【问题讨论】: