IEditableObject与DataGrid的用法是什么?

时间:2012-06-05 09:56:43

标签: wpf datagrid ieditableobject

以下是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键到下一个单元格。单元格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}" />

1 个答案:

答案 0 :(得分:2)

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

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