【问题标题】:TreeViewItem adding nodesTreeViewitem添加节点
【发布时间】: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; }
}

}

读者能否指出我正确的方向?

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    您需要返回找到的节点。 所以不是

    FindNode(item, cst);
    

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

    此外,您在节点“C14-5”和“C24-6”中使用相同的 NodeId 7。

    所以如果你想要“C24-6”下的任何节点,你应该写

    new CS_TREE(8,6,"Level-3 C24-6"),
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-03
      • 2012-09-01
      • 2022-01-22
      • 1970-01-01
      相关资源
      最近更新 更多