最近在學習windows phone 7的開發,目前wp7開發方式有兩種,分別為silverlight和xna。其中silverlight多用作開發應用,而xna專門用於遊戲開發。只是我對遊戲開發總有一種高山仰止的感覺,只好主攻silverlight了。
今天看到這篇文章終於撥開烏雲,見了明月。
總結下來,依賴屬性從需求到實現的思路:
1. 大量物件(主要是控制項)繼承產生了大量屬性,並且這些屬性往往擁有相同的預設屬性值,在很多情況下大部分屬性值並不會被改變。按照舊有的方式,每個控制項都單獨維護自己的屬性值,導致了大量的記憶體空間浪費。由此,產生了如何抽取這些繼承屬性的需求
2. 第一步:建立乙個全域性的依賴屬性物件用來儲存可以共用的屬性(key-value)
第二步:建立乙個依賴物件,如果依賴物件需要實現乙個依賴屬性,則需要向全域性的依賴屬性物件註冊特定的依賴屬性(key使用name的hashcode^依賴物件型別的hashcode),訪問值的時候通過key到依賴屬性設定或讀取已註冊的依賴屬性的值。
由此,依賴物件本身所需的儲存空間有了一定的減少。
3. 依賴物件的特定依賴屬性被維護在依賴物件中,仍然會存在乙個問題,那就是當某個依賴物件修改了該特定依賴屬性後,全域性的依賴屬性中維護的依賴屬性會被更改,而這個更改會影響所有使用改依賴屬性的依賴物件。所以,需要提供一種機制使修改後的特定依賴屬性只儲存與依賴物件本身。
4. 在依賴物件中增加 有效值列表(effective values)來解決修改後的依賴屬性值的讀取問題(同時依賴屬性也需要增加屬性的唯一標記index)
所有的修改後的依賴屬性值存在有效值列表當中,需要的時候從中讀取,否則讀取全域性依賴屬性的預設屬性值
(我在想控制項屬性的reset function是不是就是清空了effective values列表,然後就變成去讀取預設屬性了。。。)
5. 最後,同乙個dp有些時候需要支援不同的預設值,由此引入型別屬性元資料(propertymetadata)來解決這個問題,即為有繼承關係的多個的dependency object指定不同dp屬性預設值。通過乙個propertymetadata的列表實現(propertymetadata包括fortype和defaultvalue兩個字段)
嗯,基本就是這樣了,確實清楚很多,明天繼續看下附加屬性
依賴屬性 附加屬性通俗理解
依賴屬性 dependencyproperty 1.概念 依賴屬性是一種可以自己沒有值,並能通過使用binding從資料來源獲得值的屬性 通俗的講,就是依賴在別的屬性上 依賴屬性是為了解決普通屬性因繼承而帶來的物件膨脹。例如button的繼承 button buttonbase contentcon...
WPF 依賴屬性
原文 wpf 依賴屬性 屬性和事件是.net抽象模型的核心部分,wpf在這之上增加了dependency property 依賴屬性 依賴屬性使用更高效的儲存機制,並且支援附加的功能,更改通知 屬性值繼承 在元素樹中向下傳播預設屬性值 以及減少屬性儲存空間。依賴屬性是wpf動畫 資料繫結和樣式的基礎...
WPF依賴屬性
依賴屬性是一種可以自己沒有值,並能通過使用binding從資料來源獲取值 依賴在別人身上 的屬性。優點 wpf的所有控制項都是依賴屬性。依賴物件被dependencyobject類實現,依賴屬性由dependencyproperty類實現。dependencyobject有getvalue setv...