2008-08-31 67 views
3

現在學習WPF。 .Net依賴屬性今天發現了一些新東西。他們帶來的表是什麼爲什麼.Net WPF DependencyProperties必須是類的靜態成員

  • 支持回調(驗證,變更等)
  • 財產繼承
  • 附加屬性

等等。

但我在這裏的問題是爲什麼他們需要在包含類中聲明爲靜態?推薦的方法是爲它們添加實例'wrapper'屬性。爲什麼?

編輯: @Matt,但是這並不要求屬性值也是跨實例共享 - 除非它是一個派生值?

回答

2

我看到後面要求2個原因:

  1. 不能註冊同樣的DP兩次。爲了遵守這個約束條件,你應該使用靜態變量,它只會被初始化一次,因此你只會註冊DP一次。
  2. DP應任何類(它使用DB)實例創建
5

我想你需要一個依賴屬性的靜態實例的原因真的只是因爲這是他們如何設計之前進行註冊。靜態位保存所有的屬性元數據 - 它的默認值,它的所有者類型(如果它是一個附屬屬性,方便)等等,它的回調方法是什麼時候改變的 - 這種事情。有意義的是將這些事情靜態地存儲在類的所有實例中而不是每個實例。

7

由於WPF中的關鍵優化,依賴項屬性是靜態的:WPF中的許多控件具有數十個(如果不是數百個)屬性。這些類中的大多數屬性都設置爲其默認值。如果DP是實例屬性,則需要爲每個創建的對象中的每個屬性分配內存。由於DP是靜態的,因此WPF可以更有效地管理每個屬性的內存使用情況。

爲什麼你應該爲你註冊的任何DP提供一個默認值的原因是因爲當WPF設置爲它的默認值時,WPF將小心不要爲你的屬性分配額外的內存,無論你創建多少個包含該屬性的對象。

相關問題