2011-07-21 46 views
4

我在框架中查找WeakEventManager的实现,它监听对DependencyProperties的更改。我有点困惑的事实是,我发现唯一的弱属性更改事件侦听器PropertyChangedEventManager设计用于实现INotifyPropertyChanged的类型。我应该在听DependencyProperty更改时使用弱事件侦听器吗?

这是否意味着,如果你听更改

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

一个DependencyProperty,我不担心泄露谁是事件注册更让实例?

回答

6

DependencyPropertyDescriptor泄漏大时间,我有很多问题因为它。除非您明确地呼叫RemoveValueChanged,否则您的所有组件都将生根。它在内部保持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); 

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

+0

Bugger all。有更好的解决方案? – Will

+0

实例和手动解决方案是在停止监听更改时显式调用'RemoveValueChanged'。 –

相关问题