【问题标题】:Add blank row to WPF DataGrid right after new item has been added添加新项目后立即向 WPF DataGrid 添加空白行
【发布时间】:2018-12-14 23:46:51
【问题描述】:

DataGrid 的默认行为是当我单击一个空白行(也称为 NewItemPlaceholder)时,然后添加新行并且空白行消失,直到我选择另一行。我使用 DataGrid.InitializingNewItem 事件为新行设置初始值,因此新项目的所有列都已填充。我有复杂的单元格内容,编辑单元格不会为我创建新的空白行。但我仍然必须选择另一行才能出现空白行。我尝试以编程方式选择不同的行,但没有帮助。

有什么方法可以在添加新项目后立即显示空白行?

PS:当我删除所有行并使用空白行创建新行时,此行为也会产生问题。然后我没有其他行可供选择,空白行将永远消失。

PSS:CODEIMAGES 也有类似的问题,没有答案Add new row immediately upon adding new item

【问题讨论】:

  • 也许您可以处理源集合的 CollectionChanged 事件,并在您的视图模型中自己将空白项添加到集合中,而不是使用 DataGrid 的功能?
  • 这不是一个选项。集合中的新项目总是有一些默认值。所以我需要一个占位符。

标签: c# wpf datagrid


【解决方案1】:

您还可以使用 e.NewItem 属性在 InitializingNewItem 回调方法中调整新项目,以便在提交编辑时获得正确的项目。

InitializingNewItemBeginningEdit 事件之后首先触发。 请注意,要出现 NewItemPlaceholder,您还应该将 DataGrid 绑定到一个可编辑的集合,并声明默认构造函数并将 DataGrid.CanUserAddRows 属性设置为 true。

private bool _justCreatedNewItem;
dataGrid.BeginningEdit += (o, e) =>
{
  if (_justCreatedNewItem)
  {
     dataGrid.CommitEdit(DataGridEditingUnit.Row, true);
     _justCreatedNewItem = false;
  }
};
dataGrid.InitializingNewItem += (o, e) => { _justCreatedNewItem = true; };

【讨论】: