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}" />