2012-01-18 60 views
0

看來我試圖做一些簡單的事情,我有這種奇怪的感覺,我正在使用一些非常奇怪的方法來實現這一點。DataGrid - 所有列創建後的事件?

我有幾個Silverlight DataGrid對象與大量的自定義生成的列。這些列是在AutogenerateColumn事件之一中生成的。所有的列生成並顯示後,我想同步它們的寬度和順序(換句話說,我創建了幾個「鏈接」的網格,它們以非常相似的方式顯示不同的數據)。

我正面臨的問題? DataGrid似乎沒有在加載所有數據並繪製列後觸發的事件。

我暫時使用LayoutUpdated事件並檢查列計數是否應該是。這有效,但我不能動搖這是一個醜陋的解決方法的感覺。

只要DataGrid創建了所有列,是否有更好的方法來完成任務?

+0

[DataGrid.Loaded](http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.loaded(v = vs.95).aspx)? – Prescott 2012-01-18 09:29:16

+0

'DataGrid.Loaded'僅在對象第一次加載時纔會發生,不是嗎?當我刷新或更改數據時,我想再次調用該事件(因爲我需要重新同步所有網格)。 – Shaamaan 2012-01-18 14:34:33

+0

啊,是的。從閱讀文檔看來,LayoutUpdated似乎是您目前最好的選擇。 – Prescott 2012-01-18 15:44:12

回答

0

我結束了使用LayoutUpdate ...悲傷,但它是。

0

假設您對所有列進行了手動編輯,您可以在分配itemSource後調用方法,因爲列的更新在設置後發生。

+0

正如我在問題中所寫的,這些列是在'AutoGeneratingColumn'事件之一上創建的。因此,它們在分配'ItemSource'後不可見。 – Shaamaan 2012-01-18 14:31:12

+0

所以你分配'ItemsSource' ...當它分配你已經註冊了'AutoGeneratingColumn'事件來添加額外的列?事件將被阻止,直到所有處理程序都被處理完畢...所以你應該沒問題。 – ferdyh 2012-01-18 15:42:26

+0

我不太瞭解你的評論。 'AutoGeneratingColumn'事件在分配'ItemSource'之前註冊。它必須是,否則我將無法生成這些額外的列(除非我在完全不同的時刻完成這項工作,並將'AutoGeneratingColumn'完全取消)。如果我按照代碼的工作方式進行操作,那麼在'ItemSource'已被分配並且當前方法已經完成之後,事件被觸發。 – Shaamaan 2012-01-20 12:48:48