【发布时间】:2019-07-29 10:14:24
【问题描述】:
我想在用户单击✖按钮时取消连续更改。
private void CancelChangesButton_Click(object sender, RoutedEventArgs e)
{
datagrid.CancelEdit();
}
CancelEdit() 效果很好,直到...我的 DateConverter 无法 ConvertBack 字符串。 当 ViewModel 的属性设置器抛出异常时,也会发生相同的行为。 我不能在 DataGrid 中做任何事情。唯一的方法是当光标在红色单元格时按 ESC 键。
我尝试其他的东西:
datagrid.CancelEdit(DataGridEditingUnit.Row);
datagrid.CancelEdit(DataGridEditingUnit.Cell);
datagrid.CommitEdit();
datagrid.IsReadOnly = true;
// Add new item
什么都没发生。
所以我开始挖掘 .NET Framework 源代码,发现了这个:
public class DataGrid : MultiSelector
...
public bool CancelEdit(DataGridEditingUnit editingUnit)
{
return EndEdit(CancelEditCommand, CurrentCellContainer, editingUnit, true);
}
这里最重要的是 CurrentCellContainer,它从 CurrentCell 中获取值。接下来,我发现 CurrentCell 正在关注焦点。当我点击✖按钮时,CurrentCell 变为 Action 列中的单元格,当我点击 DataGrid 外部时,CurrentCell 变为 null。
因此,我必须将 CurrentCell 更改为出现验证错误的单元格,然后调用 CancelEdit()。 我觉得对吗?
如何找到所有出现验证错误的单元格?
还有其他方法可以取消编辑吗?
【问题讨论】: