0
我們處於WinRT XAML中。依賴屬性具有控制建設時設置的值
我有一個自定義控件B
與依賴項屬性Items
,該控件在另一個控件的模板中。使用PropertMetadata
類型將依賴項屬性初始化爲新的空集合。它永遠不會受到數據限制 - 牢記這一點。
當我進入頁面時,控件被實例化爲另一個自定義控件A
的模板的一部分。從B
構造函數中的斷點開始,當我檢查Items
的值時,它包含0個項目。
作爲其他活動的一部分,控件A
'手動'調用B.Items.Add()
來插入數據。沒有數據綁定。
當我向後導航,然後再次點擊導航到頁面時,構造函數再次被觸發,但此時Items
仍然有值A
添加。它保留了它的價值。
因此,即使控件被卸載並加載(我可以看到事件),控件和依賴項屬性不會重新初始化。
這是正確的嗎?
感謝您的回答,但我不認爲它是正確的。屬性元數據應該應用於「新實例」。 「爲依賴項屬性提供的最常見的元數據是爲它們提供一個應用於使用該屬性的新實例的默認值。」 - MSDN。我嗅到一個錯誤,說實話。有些東西不適合這個。 –
這絕對不是一個bug,並且已經在SO上討論了幾次。屬性元數據提供的默認值僅在控件的每個新實例中分配給該屬性。您可以簡單地通過同時創建自定義控件的兩個實例來測試這一點,並檢查「Items」值。它將是相同的集合對象,即您作爲默認值提供的集合對象。 – Clemens
明白了,你是對的。 http://www.thomasclaudiushuber.com/blog/2010/02/11/be-careful-with-default-values-of-dependency-properties-if-youre-using-reference-types/ –