我可以在树视图中获取插入节点的索引吗?

时间:2012-07-31 07:29:29

标签: c# treeview treenode

在我的树视图中,我想记住在删除或插入节点后,哪些节点已展开并重绘该状态。我通过记住扩展节点的索引解决了这个问题。如果删除了一个节点,我会减少之后的所有权限。 这是有效的,因为我可以使用treeView.SelectedNode访问已删除的节点,但是如何获取插入节点的新索引? 我无法通过保存对节点或名称或标签的引用来解决它,因为当我重绘树时,节点是全新创建的 - 我想我无法获得对新创建的节点的引用 最好的问候,Expecto

3 个答案:

答案 0 :(得分:0)

我的方式:使用你自己声明的类:

class TreeNodeEx : TreeNode
{
    public void Remove()
    {
        base.Remove();
        // what you want to do
        UpdateNode(this.Parent);
    }
}

答案 1 :(得分:0)

您可以将observableCollection绑定到TreeNode然后:

        var obd =  Observable.FromEvent<NotifyCollectionChangedEventArgs>(
            ev => obdCollection.CollectionChanged += CheckChanges,ev=> obdCollection.CollectionChanged -= CheckChanges);


   private void CheckChanges(object sender, NotifyCollectionChangedEventArgs e)
    {
        Console.WriteLine("new Starting index : "+e.NewStartingIndex);
        Console.WriteLine("Old Starting index : " + e.OldStartingIndex);
        Console.WriteLine("new Items : " + e.NewItems);
        Console.WriteLine("Old Items : " + e.OldItems);


    }

通过这种方式,您可以查看集合中的更改内容。

答案 2 :(得分:0)

答案并不是我真正想要的,但是在我发现插入后“AfterSelect”事件发生后,我这样做了:

private void treeViewProduct_AfterSelect(object sender, TreeViewEventArgs e)
    {

        if (insertMode)
        {

            treeViewProduct.NotifyAboutInsert(e.Node.Index);
        }
...
}

然后我的树视图处理节点之后更改的索引,并完美地重绘树。