여기 http://blogs.msdn.com/b/vinsibal/archive/2009/04/07/5-random-gotchas-with-the-wpf-datagrid.aspx에서 발췌입니다 :DataGrid에서 IEditableObject를 어떻게 사용합니까?
5.Data 소스 항목은 트랜잭션 편집 기능을 얻을 IEditableObject를 구현해야합니다.
IEditableObject에 익숙하지 않은 분은 좋은 설명과 코드 샘플이 포함 된 MSDN 문서를 참조하십시오. DataGrid는 을 IEditableObject 인터페이스를 통해 트랜잭션 편집 기능에 구운 것입니다. 셀 편집을 시작하면 DataGrid는 셀 편집 모드와 행 편집 모드 인 에 들어갑니다. 이것이 의미하는 바는 이 셀을 취소/확정하고 행을 취소/확정 할 수 있다는 것입니다. 예를 들어, I 셀 0을 편집하고 탭을 눌러 다음 셀로 이동합니다. 탭을 누르면 셀 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