【发布时间】:2014-05-21 16:16:55
【问题描述】:
我正在为我的 WPF 数据网格实现撤消功能,但是我遇到了问题。我确信这只是对 C# 语言及其语法的误解,但我不知道问题出在哪里。当单元格编辑结束时,我获取上一个项目并显示一个项目值 (Z)(用于调试目的)。它包含在编辑之前持有的项目(这是我想要的)。但是当我尝试“撤消”它时,我再次显示相同的值 (Z),但它已更改为数据网格中该项目的当前值。
CellEditEnding 处理程序
private void toolGrid_CellEditEnding(object sender, DataGridVellEditEndingEventArgs e)
{
undoTool = toolsList[selectedToolNdx];
MessageBox.Show(undoTool.Z.ToString());
}
KeyDown 处理程序
private void toolGrid_PreviewKeyDown(object sender, KeyEventArgs e)
{
if((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
{
if (e.Key == Key.Z)
{
MessageBox.Show(undoTool.Z.ToString());
e.Handled = true;
}
}
}
例如,我可以将 z 值从 3 更改为 5,并且 celleditending 事件会触发,并且消息框会显示值“3”(到目前为止一切正常)。但是,然后我撤消 (CTRL-Z) 并且消息框现在显示值“5”,即使它应该仍然是 3。为什么 undoTool 会发生变化(以及为什么它似乎会自行发生变化)?
【问题讨论】:
-
这是 WPF DataGrid 预期行为的一部分。