2

以下是http://blogs.msdn.com/b/vinsibal/archive/2009/04/07/5-random-gotchas-with-the-wpf-datagrid.aspx的摘录:

5.数据源项目应该实现IEditableObject以获得事务编辑功能。

如果您不熟悉 IEditableObject,请参阅这篇 MSDN 文章,其中有很好的解释和代码示例。DataGrid 具有通过 IEditableObject 接口进行事务编辑的功能。当您开始编辑单元格时,DataGrid 会进入单元格编辑模式和行编辑模式。这意味着您可以取消/提交单元格以及取消/提交行。例如,我编辑单元格 0 并按 Tab 键转到下一个单元格。按 T​​ab 键时提交单元格 0。我开始在单元格 1 中输入并意识到我想取消操作。我按“Esc”,它会恢复单元格 1。我现在意识到我想取消整个操作,所以我再次按“Esc”,现在单元格 0 恢复到其原始值。

即使没有实现 IEditableObject,我也会得到相同的事务行为。我错过了什么?

  public class Person {
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Description { get; set; }
  }

  People = new List<Person> {
    new Person(){FirstName = "fname", LastName = "lname", Description = "description"}
  };

  <DataGrid ItemsSource="{Binding Path=People}" />
4

1 回答 1

2

当然,对于内存中的简单字符串来说,这并不重要。但也有用途IEditableObject
例如,假设您想将每条已编辑的记录存储到数据库中。您可能希望在一个事务中提交所有更改,该事务位于EndEdit(). 其他接口方法也有类似的用途。

此外,您并不总是直接编辑绑定对象。您的IEditableObject实例可能包含另一个类型的变量,它是实际的数据源。EndEdit()在这种情况下调用之前,您不会应用编辑CancelEdit()的值,并且会从原始数据源恢复值。

于 2012-06-05T10:09:17.137 回答