我在框架中查找了监听DependencyProperties更改的WeakEventManager实现。我发现唯一的弱属性更改事件侦听器PropertyChangedEventManager被设计用于实现INotifyPropertyChanged的类型,这让我感到有点困惑。
这是否意味着如果您收听DependencyProperty进行更改
DependencyPropertyDescriptor
.FromProperty(target, target.OwnerType)
.AddValueChanged(component, handler)
我不必担心因事件登记而活着的实例泄露?
答案 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);
由于属性描述符已缓存,因此所有组件都将被植根。