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

4 .net wpf events weak-references weakeventmanager

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

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

DependencyPropertyDescriptor
    .FromProperty(target, target.OwnerType)
    .AddValueChanged(component, handler)
Run Code Online (Sandbox Code Playgroud)

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

ani*_*vas 6

DependencyPropertyDescriptor泄漏的时间很长,我因此而遇到很多问题.除非您明确调用RemoveValueChanged所有组件将被root.在内部它保持HashTableEventHandler.这是它的作用:

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

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