WPF踩坑記錄:在DataGrid的RowEditEnding(CellEditEnding)事件中獲取的數據源,默認是更改前的而非更改後的

踩坑描述:

        我想在RowEditEnding中獲取更改後的數據,但是這個RowEditEnding事件是在更改提交前觸發的,意味着它獲取到更改行的數據源就是舊的。(CellEditEnding也是如此)
        也許這個事件適用於應用修改前檢測修改是否合法,不合法可以撤銷修改,但我想實現的效果是對更改後的數據進行操作的。然後我也找不到有類似於RowEditEnded之類能獲取到修改後數據的事件。網上找了好久終於找到答案,最終的更改很簡單,但是感覺並不是特別優雅,也許WPF的DataGrid本身就是個雞肋吧……

解決方法:

        數據源的值默認是執行完該事件後纔會被更新。因此,我們需要在該事件執行前,就要讓數據源得到更新。
        在Xaml文件中,當進行數據綁定時,更改DataGrid中相應列的UpdateSourceTrigger爲PropertyChanged

吐槽:

        但真的覺得這樣做不是很好,因爲這相當於提前應用了修改,意味着把RowEditEnding的撤銷用法給整沒了…… 但似乎也沒有第二種做法了。也許這就是“RowEditEnding和RowEditEnded"不可得兼吧……

實測在此情況 下圖中的Cancel無效:

這幾天其實還踩到好多DataGrid的坑,最好的解決方法應該是下次不用WPF的DataGrid了A..A

參考資料:獲取wpf datagrid單元格編輯事件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章