2011-07-21 10 views
4

私はWeakEventManagerの実装で、DependencyPropertiesの変更をリッスンするフレームワークを探していました。私はちょっと不自由なのは、私が見つけた唯一の弱いプロパティ変更イベントリスナーであるPropertyChangedEventManagerは、INotifyPropertyChangedを実装する型で使用するように設計されているという事実が混乱しています。DependencyPropertyの変更を聞きながら弱いイベントリスナーを使用する必要がありますか?

これは、あなたが変更

DependencyPropertyDescriptor 
    .FromProperty(target, target.OwnerType) 
    .AddValueChanged(component, handler) 

ためのDependencyPropertyに耳を傾けるならば、私はイベント登録で生き続けているインスタンスが漏れを心配する必要がないことを意味するのでしょうか?

答えて

6

DependencyPropertyDescriptor大きなリークがありましたので、私は多くの問題を抱えていました。 RemoveValueChangedを明示的に呼び出さない限り、すべてのコンポーネントが根付きます。内部的にはがEventHandlerである。ここではそれが何をするかです:

if (this.valueChangedHandlers == null) 
    this.valueChangedHandlers = new Hashtable(); 
EventHandler eventHandler = (EventHandler) this.valueChangedHandlers[component]; 
this.valueChangedHandlers[component] = (object) Delegate.Combine((Delegate) eventHandler, (Delegate) handler); 

プロパティ記述子がキャッシュされるので、すべてのコンポーネントが根付いされます。

+0

バグすべて。より良い解決策を得ましたか? – Will

+0

siempleと手動の解決策は、リスニングの停止が変更されたときに明示的に 'RemoveValueChanged'を呼び出すことです。 –

関連する問題