2011-07-29 7 views
1

TelerikのRadTreeView(Silverlightバージョン)コントロールがあります(継承元から継承しています)。 新しいコントロールMyTreeViewを呼び出しましょう。派生TreeViewコントロールでCheckedイベントを拡張する - イベントハンドラを一時的に削除する方法?

アイテムをMyTreeViewにチェックインすると、自動的にすべての子アイテムがチェックされます。また、ノードをチェックした後、その親にすべての子がチェックされている場合は、その親もチェックしたいと思います。それはツリー全体でルートまで再帰的に行きます。私はデフォルトでこの機能を見つけることができないようです。

私はアイテムをチェックする再帰アルゴリズムの解決策は必要ありません。私はそれを簡単に自分で管理できます。私が問題として見ているのは、ユーザがCheckedUncheckedイベントで登録できるという事実です。したがって、ユーザがCheckedイベントに登録している場合は、アイテムがチェックされるたびにすべての子ノードがチェックされ、その親ノードのチェックの結果として自動的にチェックされた各子ノードのイベントが発生します。 私のシナリオでは、これは望ましい動作ではありません。手動でチェックされたアイテムの場合にのみ、イベントにを発し、その結果として自動的にチェックされる他のノードではないようにします。

私はOnCheckedメソッドをオーバーライドできると思っていましたが、プライベートであるか、そのようなメソッドがないため、アクセスできません。コンストラクタのCheckedイベントに別のイベントハンドラを追加することができます。これは、他のイベントハンドラがイベントに登録される前に呼び出されますが、子ノードがイベントを発生させることはありません。一時的にCheckedでハンドラの登録を解除してから、ノードを確認した後に再度登録したいと考えています。しかし、誰がイベントを購読しているのかわからないので、私はそれらを手動で取り消すことはできません(イベントは公開されています)、私は呼び出しリストを取得できないようです。

サブスクリプションされたイベントやその他の方法で一時的にオフにする方法はありますか?記載されている問題に対するより良いアプローチはありますか?

答えて

1

使用できるプロパティはRadTreeViewCheckEventArgs.IsUserInitiatedです。

+0

はい、既にIsUserInitiatedプロパティが見つかりました。それは私の問題を解決する。トライステートオプションはすでにこの機能を持っていますが、私は3つの状態をすべて望んでいませんでした。だから私はIsUserInitiatedに固執する。 –

+0

IMHO誰かが同じ問題に遭遇することになるので、あなた自身の質問に答えるのは間違っていません。 :) –

+0

もちろん、私はずっと前に解決策を見つけたので、私は単に答えることを忘れてしまった。時間とともに、私はそれに答えるだろう。 :) –

関連する問題