0

TreeViewコントロールがあり、新しいノードを追加した後、カスタムコードを実行する必要があります(たとえば、ノードを展開して表示し、編集メソッドを起動します)。これをTreeViewコントロールのすべてのインスタンスで使用できるようにしたいので、TreeViewコントロールをサブクラス化することを考えました。

これで、treeviewが新しいノードがいつ追加されたかを知るために、アイテムが追加されたときに発生するイベント(追加されない)、または新しいノードを追加するために実行されたコマンドへの参照があります。アイテム。

したがって、2つの質問:

1)ツリーノードが追加されるたびに発生するイベントをTreeViewに追加する方法はありますか(私は常にViewModelからのソースコレクションを介してノードを追加しています)-これを行う方法が見つかりませんでした

2)ViewModelのAddCommandにバインドされるAddCommandプロパティをTreeListに追加し、ビューモデルの代わりにTreeList.AddCommandにバインドするボタンまたはContextMenuアイテムを追加することができます。このように、TreeViewはAddCommandへの参照を保持しますが、実際の使用法が少し奇妙になるという欠点があります。質問:TreeViewのAddCommand(またはそれに関しては任意のコマンド)がいつ実行されたかを知るにはどうすればよいので、その後にカスタムコードを実行できますか?CommandManager.AddExecutedHandlerは解決策のようですが、実行できません。

4

1 に答える 1

0

これは何か助けになりますか?

public class CustomTreeControl : TreeView
{
    ...

    // WPF only
    protected override void OnItemsSourceChanged(IEnumerable oldValue, IEnumerable newValue)
    {
        base.OnItemsSourceChanged(oldValue, newValue);

        Debug.WriteLine("OnItemsSourceChanged");
    }

    // WPF + Silverlight
    protected override void OnItemsChanged(NotifyCollectionChangedEventArgs e)
    {
        base.OnItemsChanged(e);

        Debug.WriteLine("OnItemsChanged: {0}", e.Action);
    }
}
于 2012-04-29T14:37:09.827 に答える