26

IEditableObjectIRevertibleChangeTracking(都来自 System.ComponentModel 命名空间)有什么区别?看起来第一个支持显式事务,而第二个更隐式 - 但最终结果是相同的。我应该如何在代码中实现这一点?目前我在 BeginEdit 中什么都不做分别在EndEditCancelEdit中调用RejectChangesAcceptChanges。我的问题是这也将接受在 BeginEdit 之前所做的更改。

这真的是微软想要的还是我试图实现两个互斥的接口?

4

2 回答 2

29

这两个接口并不相互排斥。它们只是为了支持不同但有些相关的场景,这些场景也可以由同一个给定的类实现。这是一个快速的解释:

IEditableObject 接口

IEditableObject接口旨在支持对象在编辑时需要以某种特定方式管理其内部状态的场景。

出于这个原因,接口包括显式标记编辑阶段何时开始、完成或中止的方法,以便可以在这些阶段采取适当的操作来修改对象的状态。


IRevertibleChangeTracking 接口

IRevertibleChangeTracking接口旨在支持对象需要能够回滚到其先前状态的场景

该接口具有标记对象的当前状态何时应变为永久状态或应恢复为最后已知的永久状态的方法。

于 2010-06-03T15:04:51.657 回答
1

IEditableObject用于短期的、可恢复的修改,例如对话框。

IRevertibleChangeTracking用于长期、可恢复的更改,例如编辑记录和跟踪记录是否需要保存。

我经常实现这两个接口,以便能够支持两个级别的撤消。

于 2015-02-20T19:26:05.353 回答