2012-02-06 68 views
1

我的Silverlight 4應用程序中有一個數據網格。 我也做了一個自定義文本框,只接受數值並做了其他一些具體的事情。 我還在我綁定的自定義控件上添加了一個十進制依賴項屬性,它幾乎可以返回控件從TextBox繼承的Text的格式化版本。自定義控件的Silverlight數據網格虛擬化

然後我將datagrid的itemssource綁定到observablecolletion。 我還使用DataGridTemplateColumn將我的自定義控件添加爲datagrid中的一列。

一切工作正常,除了datagrid的虛擬化。 如果我將一個項目添加到dataGrid,編輯我的自定義控件中的值,刪除該行,然後添加一個全新的行(一個完整的新實例),那麼我的自定義控件中的值就是已刪除行的值。 並澄清,這不是一個約束性的錯誤或類似的東西。 問題是,我的自定義文本框的構造函數沒有被調用,也沒有更新綁定,直到我更改我的自定義控件中的實際值。 datagrid的虛擬化將重新使用以前創建的控件。

我不想關閉虛擬化。 有沒有辦法指定我的自定義控件應該如何回收(虛擬化)? 或者,當控件被虛擬化或回收時,可能會觸發一個事件?

任何幫助將不勝感激。

回答

0

有沒有可能升級到Silverlight 5?在SL 5中,您有DataContextChanged事件,我認爲這應該是檢測控件何時重用以繪製另一行的好方法。

如果SL 5不是一個選項,您可能可以在Loaded事件中捕獲它。我不完全確定,但我認爲在控制被重用時,Loaded應該被解僱。然後每當Loaded被激發時,將當前的DataContext保存爲一個臨時變量。當下次啓動Loaded時,您可以將舊的DataContext與當前的DataContext進行比較,如果已更改,則根據需要重新運行您的邏輯。