2010-12-18 81 views
1

據說這裏:創建依賴項屬性有什麼缺點?

http://msdn.microsoft.com/en-us/library/ms753358.aspx

有時,私人領域的支持你的財產的典型技術是足夠的。

但是,你應該實現你的財產,只要你想你的財產,以支持以下功能WPF的一個或多個依賴項屬性...

如果我看所有的能力,他們都非常明顯需要,所以我不能真正看到什麼時候我不應該創建依賴項屬性。

因此,如果我係統地創建一個依賴項屬性,而不是僅僅創建一個私有字段會有什麼缺點?

回答

3

有其實一些缺點:

  • 創建一個依賴屬性比私有字段支持的房地產更詳細。
  • 當您使用Dependency屬性時,您的數據存儲在Dictionary中。它具有一些性能影響:訪問查找在運行時完成,轉換也完成,並且裝箱/取消裝箱將佔用,因爲每個依賴項屬性值都存儲爲對象。此外,所有這些功能都是以每次訪問(讀取或寫入)支付的價格(性能價格)來實現的。事件將提高(如的PropertyChanged)審定會根據您的DP的配置進行...

  • 你的類必須自DependencyObject

繼承這是我願意的時候需要付出一定的代價這些功能。但在很多情況下不需要它們=>在適當的時候使用DP,在其他地方使用經典的私人領域。

有時您會後悔某個屬性是不可綁定的:發生這種情況時,請將該字段替換爲引擎蓋下的DP實現。

1

這取決於你需要什麼。例如,如果你需要綁定,你必須創建一個DependencyProperty。 如果你有數據使用的DependencyProperty是毫無價值的,少高性能不「溝通」與圖形界面,因爲你不需要綁定,動畫等

依賴屬性的目的工作是提供一種基於其他輸入值計算屬性值的方法。這些其他輸入可能包括系統屬性,如主題和用戶偏好,實時屬性確定機制(如數據綁定和動畫/故事板),多用途模板(如資源和樣式)或通過父子關係已知的值元素樹中的其他元素。另外,還可以實現依賴屬性,以提供自包含的驗證,默認值,監視其他屬性更改的回調,以及可根據潛在的運行時信息強制屬性值的系統。派生類還可以通過重寫依賴項屬性元數據來更改現有屬性的某些特定特性,而不是覆蓋現有屬性的實際實現或創建新屬性。

1

只有在製作/修改新的WPF控件時才應使用DP。開銷太多,不能用作虛擬機上的屬性(並且使虛擬機依賴於WPF)。對於正常使用,你應該實現INotifyPropertyChanged

+0

感謝您INotifyPropertyChanged你知道DP是否在地下使用它? – user310291 2010-12-18 13:08:47

+0

我不這麼認爲,因爲DP遠不止是變化通知。 – Euphoric 2010-12-19 10:39:29