5

我在框架中寻找一个WeakEventManager的实现,它监听对 DependencyProperties 的更改。我发现唯一的弱属性更改事件侦听器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 回答