Silverlight DataGrid 的OnUnloadingRow事件會遺失!

Silverlight DataGrid 的OnUnloadingRow事件會遺失!

最近使用Silverlight 的DataGrid,發現很多地方礙手礙腳的,
好不容易解決大部分需求的時候,卻發現一個莫名其妙的問題
就是DataGrid的OnUnloadingRow事件會遺失!


因為特殊需求,所以我繼承了DataGrid,有個原因就是為了要處理目前畫面上顯示的Row,
根據DataGrid的說明,大概也只有LoadingRow和UnloadingRow這兩個事件可以辦到
我繼承DAtaGrid後,覆寫了OnLoadingRow和OnUnloadingRow這兩個函式
程式碼如下:

   1: public class MyDataGrid : DataGrid {
   2:     protected override void OnLoadingRow(DataGridRowEventArgs e) {
   3:         ...
   4:         base.OnLoadingRow(e);
   5:     }
   6:  
   7:     protected override void OnUnloadingRow(DataGridRowEventArgs e) {
   8:         ...
   9:         base.OnUnloadingRow(e);
  10:     }
  11: }

照道理來說他們應該會平衡呼叫才是,也就是載入一個新的就要丟掉一個舊的!
但是我發現,完全不是這樣阿!!!17


OnLoadingRow是很乖的每次都會被呼叫,但是OnUnloadingRow就像沒人要的小孩一樣,
經常會遺失,在快速拉動捲軸,讓DataGrid裡面的Row快速變換的情形下更是嚴重!
經過我吐血的實驗發現,竟然只要用DataGrid.UnloadingRow的方式加入事件函式,
叫用的情形就完全正常了!!!
而且只需要加入UnloadingRow事件就可以了
Silverlight我真猜不透你阿!!

Silverlight DataGrid 的OnUnloadingRow事件會遺失!.rar