5

DependencyPropertiesへの変更をリッスンするWeakEventManagerの実装のフレームワークを探していました。私が見つけた唯一の弱いプロパティ変更イベントリスナーであるPropertyChangedEventManagerは、INotifyPropertyChangedを実装する型で使用するように設計されているという事実に少し混乱しています。

これは、DependencyPropertyで変更をリッスンする場合を意味しますか?

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

イベント登録によって存続しているインスタンスのリークについて心配する必要はありませんか?

4

1 に答える 1

7

DependencyPropertyDescriptorリークが大きく、そのために多くの問題がありました。明示的に呼び出さない限り、RemoveValueChangedすべてのコンポーネントがルート化されます。内部的には のHashTableを維持し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);

プロパティ記述子はキャッシュされるため、すべてのコンポーネントがルート化されます。

于 2011-07-21T17:55:27.610 に答える