0

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

4

3 回答 3

0

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

class TreeNodeEx : TreeNode
{
    public void Remove()
    {
        base.Remove();
        // what you want to do
        UpdateNode(this.Parent);
    }
}
于 2012-07-31T07:53:33.483 回答
0

您可以将 observableCollection 绑定到您的 TreeNode Then :

        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);


    }

这样您就可以检查集合中发生了什么变化。

于 2012-07-31T08:52:24.307 回答
0

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

private void treeViewProduct_AfterSelect(object sender, TreeViewEventArgs e)
    {

        if (insertMode)
        {

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

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

于 2012-08-01T11:52:04.910 回答