使WPF DataGrid仅在全行提交后创建新项

时间:2017-09-20 15:16:36

标签: c# wpf datagrid undo

我正在处理的代码使用WPF DataGrid来存储条目表,这些条目绑定到项目的ObservableCollection,用户可以使用表格底部的空白行创建新项目。

当用户选择新行中的单元格时,在键入第一个键击时,DataGrid会创建一个新的空白项目并将其插入ObservableCollection中。一旦用户点击Enter或将焦点从单元格中移开,新文本就会被提交为对项目的编辑。

有没有办法改变DataGrid的行为,以便在用户输入完成之前不会创建空白项?或者,至少在提交行之后,不会将空白项添加到ObservableCollection中。

我想这样做,以便在完成整行提交后才将新项目添加到ObservableCollection中,这意味着添加到Collection的每个新项目都已包含数据,而不是插入空白然后再编辑。

我已经搜索了高低的答案,但似乎没有其他人遇到这个问题。

我想要这个功能的原因是我在这个DataGrid中实现了一个“撤销”功能,但是当新行被添加为空白然后再编辑时,这总是最终算作两个变化,这意味着用户需要执行两次“撤消”操作以删除他们刚刚创建的行。而这根本不直观。

感谢。

1 个答案:

答案 0 :(得分:1)

通常,这是DataGrid的正常行为。

  1. 开始编辑行时,DataGrid会为新集合项调用Add()
  2. 当您按下Escape键或以任何其他方式调用Remove()时,DataGrid会自动为该项目调用CancelEdit()

使用空白/默认值支持(忽略代码)收集项没有什么奇怪的。或者,您可以添加一些代理集合,并在Datagrid保存行数据时将其更改提交到主集合。对于我来说,第一种方式是可取的。