0

私のツリービューでは、どのノードが展開されたかを覚えておき、ノードを削除または挿入した後にその状態を再描画したいと考えています。展開されたノードのインデックスを覚えて解決しました。ノードが削除されると、その後のすべてのインデックスが減少します。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 に答える