如果数据绑定控件发现当前行绑定的对象是IEditableObject,那么在该行上如果有一个Cell进入编辑状态,并且是第一个单元格的时候,就需要调用绑定对象的BeginEdit方法。
当某一行上某一个Cell处于编辑状态的时候,Press Esc,该Cell会退出编辑状态,值也会回滚。注意这个时候不会调用IEditableObject的CancelEdit方法,这是Cell本身应该 提供的行为。这个时候IsEdit为False,但是Row拥有焦点,继续Press Esc,会调用IEditableObject的CancelEdit方法,你会发现其他列的值也会回滚。
当某一行上某一个Cell处于编辑状态的时候,鼠标点击其他行,该Cell会退出编辑状态。只是会调用IEditableObject的EndEdit方法。
对于IEditableCollectionView来说,EditItem,CommitEdit还有CancelEdit方法分别对应着IEditableObject接口的BeginEdit,EndEdit和CancelEdit,调用时机完全一样。
数据绑定控件如果其数据源是IEditableCollectionView, 在处理BeginEdit,EndEdit和CancelEdit的时候应该直接调用CollectionView的相应方法,这个时候就不需要在处理 IEditableObject接口了,IEditableCollectionView内部会调用该接口。
只有在其数据源不是IEditableCollectionView的时候,如果Row绑定对象是IEditableObject,需要调用IEditableObject的接口实现。
这样的话,自定义数据绑定控件就可以完美支持这两个接口了。
说明:以上描述是以Silverlight DataGrid为例,自定义控件类似。