我想在用户单击 ✖ 按钮时取消连续更改。
源代码
private void CancelChangesButton_Click(object sender, RoutedEventArgs e)
{
datagrid.CancelEdit();
}
CancelEdit() 效果很好,直到...我的 DateConverter 无法转换回字符串。当 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);
}
-> .NET 参考源
这里最重要的是 CurrentCellContainer,它从 CurrentCell 获取值。接下来,我发现CurrentCell正在跟随焦点。当我单击 ✖ 按钮时,CurrentCell 更改为操作列中的单元格,当我单击 DataGrid 外部时,CurrentCell 更改为 null。
因此,我必须将 CurrentCell 更改为带有验证错误的单元格,然后调用 CancelEdit()。我想的对吗?
如何查找所有存在验证错误的单元格?
还有其他方法可以取消编辑吗?
人到中年有点甜
慕斯王
相关分类