我应该在收听DependencyProperty更改时使用弱事件侦听器吗?

时间:2011-07-21 17:28:58

标签: .net wpf events weak-references weakeventmanager

我在框架中查找了监听DependencyProperties更改的WeakEventManager实现。我发现唯一的弱属性更改事件侦听器PropertyChangedEventManager被设计用于实现INotifyPropertyChanged的类型,这让我感到有点困惑。

这是否意味着如果您收听DependencyProperty进行更改

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

我不必担心因事件登记而活着的实例泄露?

1 个答案:

答案 0 :(得分:6)

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);

由于属性描述符已缓存,因此所有组件都将被植根。