2011-07-21 141 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'。 –

相關問題