IEditableObject和IRevertibleChangeTracking之间有什么区别(两者都来自System.ComponentModel命名空间)?看起来第一个支持显式事务,而第二个支持更隐式 - 但最终结果是相同的。我应该如何在代码中实现它?目前我在BeginEdit中没有执行任何操作,并分别在RejectChanges和AcceptChanges中致电EndEdit和CancelEdit。我的问题是,这也将接受在BeginEdit之前所做的更改。
这真的是微软想要的,还是我试图实现两个互斥的接口?
答案 0 :(得分:25)
这两个接口不是互斥的。它们仅用于支持不同但有些相关的场景,它们也可能由同一个给定的类实现。这是一个快速解释:
IEditableObject界面旨在支持对象在编辑时以某种特定方式管理其内部状态的场景。
因此,界面包含明确标记编辑阶段何时开始,完成或中止的方法,以便可以采取适当的操作来修改对象在这些阶段的状态。
IRevertibleChangeTracking接口旨在支持对象需要回滚到其先前状态的场景。
接口有一些方法可以标记何时应该使对象的当前状态成为永久状态,或者应该将其恢复为上一个已知的永久状态。
答案 1 :(得分:1)
IEditableObject 用于短期可恢复的修改,例如对话框。
IRevertibleChangeTracking 用于长期可恢复的更改,例如编辑记录和跟踪是否需要保存记录。
我经常实现这两个接口,以便我能够支持两个级别的撤销。