踩坑描述:
我想在RowEditEnding中获取更改后的数据,但是这个RowEditEnding事件是在更改提交前触发的,意味着它获取到更改行的数据源就是旧的。(CellEditEnding也是如此)
也许这个事件适用于应用修改前检测修改是否合法,不合法可以撤销修改,但我想实现的效果是对更改后的数据进行操作的。然后我也找不到有类似于RowEditEnded之类能获取到修改后数据的事件。网上找了好久终于找到答案,最终的更改很简单,但是感觉并不是特别优雅,也许WPF的DataGrid本身就是个鸡肋吧……
解决方法:
数据源的值默认是执行完该事件后才会被更新。因此,我们需要在该事件执行前,就要让数据源得到更新。
在Xaml文件中,当进行数据绑定时,更改DataGrid中相应列的UpdateSourceTrigger为PropertyChanged
吐槽:
但真的觉得这样做不是很好,因为这相当于提前应用了修改,意味着把RowEditEnding的撤销用法给整没了…… 但似乎也没有第二种做法了。也许这就是“RowEditEnding和RowEditEnded"不可得兼吧……
实测在此情况 下图中的Cancel无效:
这几天其实还踩到好多DataGrid的坑,最好的解决方法应该是下次不用WPF的DataGrid了A..A