2011-08-04 55 views
4

我想要監聽WPF元素上的IsEnabled屬性的更改(以便我可以在更改時運行一些通用代碼),而無需在每個窗口中放入大量代碼/頁。在Wpf元素上監聽對IsEnabled的更改

我也想避免由於強大的事件監聽器而導致的任何內存泄漏問題。我遇到過一些文章,建議使用弱事件監聽器等,但對於看起來應該很容易的事情來說,這似乎非常複雜。

我不想爲了做到這一點而需要子類化控件,因爲有幾種控制類型(可能更多將來),我想要監聽IsEnabled更改。

有沒有人想出一個更好的方式來處理這個問題?

回答

4

很好地解決了這個問題將創建一個自定義的附加屬性和設置單向與IsEnabled屬性爲源綁定:

<Control IsEnabled={Binding IsEnabledProperty} 
     AttachedProperty={Binding RelativeSource={RelativeSource Self}, Path=IsEnabled, Mode=OneWay}"/> 

這允許你來處理附加屬性的通用的功能更改處理程序(可能涉及發射自定義路由事件,因爲IsEnabled是常規CLR事件並且不會冒泡)。

2

有一個Control.EnabledChanged事件

+0

實際上,它被命名爲IsEnabledChanged。 –