在 Wpf DataGrid 底部有一个“空白新行”用于添加新行。
当我开始添加新行(输入“空白新行”)时,空白新行消失
因此,为了开始添加新行,我需要当前行中的 Tab Of(失去焦点)。
添加新行时如何让底部出现“空新行”?
将 Datagrid 的
CanUserAddRows
属性设置为 True
这称为 NewItemPlaceHolder,类型为 MS.Internal.NamedObject。该构造不可用于比较。要识别 NewItemPlaceHolder ToString() 将返回“{NewItemPlaceHolder}”,这就是您必须测试的内容。如果您愿意,您也可以实现自己的。要回答您的问题,在行中第一个单元格的编辑结束时,DataGrid_CellEditEnding 将触发,您需要调用 DataGrid.CommitEdit(DataGridEditingUnit.Row, true)。第二个参数 true 导致编辑结束。进行调用后,它将导致 DataGrid_CellEditEnding 重新输入。作为解决方法,创建一个类成员 bool 字段 (IsEditCommit) 并按以下方式使用它:
private bool
IsEditCommit = false;
private void DataGrid_CellEditEnding
(object sender,
DataGridCellEditEndingEventArgs e)
{
if (!IsEditCommit)
{
IsEditCommit =
true;
var datagrid =
(DataGrid)sender;
if (e.EditAction !=
DataGridEditAction.Cancel)
datagrid.CommitEdit
(DataGridEditingUnit.Row,
true);
IsEditCommit =
false;
}
}
此效果将在第一次单元格编辑发生时生成 NewItemPlaceHolder,并将导致当前 NewItemPlaceHolder 转换为当前项目源的预期项目类型