取消datagrid cellendediting不会停止编辑?

时间:2016-09-14 11:52:43

标签: c# wpf wpfdatagrid

我正在实施一个wpf datagrid cellendediting事件,该事件执行可能失败的操作。如果操作失败,我将事件设置为已取消。这是一个基本的例子:

private void datagrid_CellEditEnding(object sender, DataGridCellEditEndingEvent e)
{
    e.Cancel = true;
}

哪个取消了设置的值,但datagridcell仍然处于编辑状态。当我取消时,我无法弄清楚如何实际导致单元格结束编辑。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

你需要调用CancelEdit:

private void datagrid_CellEditEnding(object sender, DataGridCellEditEndingEvent e)
{
    e.Cancel = true;
    (sender as DataGrid).CancelEdit(DataGridEditingUnit.Cell);
}

答案 1 :(得分:1)

另一个解决方案是如此接近 - 您需要在不设置 e.Cancel 的情况下调用 CancelEdit 以防止将该值设置为新值:

private void datagrid_CellEditEnding(object sender, DataGridCellEditEndingEvent e)
{
    (sender as DataGrid).CancelEdit(DataGridEditingUnit.Cell);
}

另一种可能是继续编辑 TextBox 并再次将焦点设置到文本框,以防用户点击外部:

private void datagrid_CellEditEnding(object sender, DataGridCellEditEndingEvent e)
{
    e.Cancel = true;
    (sender as DataGrid).Dispatcher.BeginInvoke((Action)(() =>
    {
        (sender as DataGrid).SelectedIndex = e.Row.GetIndex();
        e.EditingElement.Focus();
    }));
}