我正在实施一个wpf datagrid cellendediting事件,该事件执行可能失败的操作。如果操作失败,我将事件设置为已取消。这是一个基本的例子:
private void datagrid_CellEditEnding(object sender, DataGridCellEditEndingEvent e)
{
e.Cancel = true;
}
哪个取消了设置的值,但datagridcell仍然处于编辑状态。当我取消时,我无法弄清楚如何实际导致单元格结束编辑。有什么建议吗?
答案 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();
}));
}