下面是摘自http://blogs.msdn.com/b/vinsibal/archive/2009/04/07/5-random-gotchas-with-the-wpf-datagrid.aspx:IEditableObject與DataGrid的用法是什麼?
5.Data源項目應該實現IEditableObject得到事務編輯功能。
如果您對IEditableObject不熟悉,請參閱此MSDN文章 ,它有很好的解釋和代碼示例。 DataGrid通過IEditableObject 接口烘焙了 的事務編輯功能。當您開始編輯單元格時,DataGrid將進入單元格 編輯模式以及行編輯模式。這意味着你可以取消/提交單元格以及取消/提交行。例如,I 編輯單元格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}" />
如果數據庫操作失敗會怎麼樣?我不認爲EndEdit()是做數據庫操作的好地方。 – alice
@alice然後你將不得不相應地處理錯誤。它不一定是數據庫,它也可以是另一個內存中的對象,或者任何其他對象,除非這些更改是最終的,否則不希望任何人觸及。對於IEditableObject,使用僅包含少量字符串屬性的普通對象並不是一個好例子。 – Botz3000