我的基于 EMF 的 Eclipse 应用程序存在以下问题:
撤消工作正常。验证工作正常。但是当 GUI 字段中的数据出现验证错误时,这会阻止使用undo操作。例如,无法撤消以恢复该字段的有效状态。
在这张图片中,无法使用 undo:
应用程序中使用的工具:
- Eclipse 数据绑定
UpdateValueStrategy
s 在绑定上进行验证- 撤消是使用
UndoAction
调用的标准实现的CommandStack.undo
- 一个
MessageManagerSupport
将验证框架连接到基于 Eclipse Forms 的 GUI 的类。
数据绑定如下所示:
dataBindingContext.bindValue(WidgetProperties.text(...),
EMFEditProperties.value(...), validatingUpdateStrategy, null);
问题是这样的:
- 撤消系统对更改模型的命令起作用。
- 当存在验证错误时,验证系统会阻止更新到达模型。
为了在出现验证错误时使撤消工作,我想我可以做以下不同的事情之一:
- 使撤消系统在 GUI 层上工作。(这将是一个巨大的变化,可能根本不可能使用 EMF。)
- 以与有效数据相同的方式,使 GUI 中的无效数据触发更改模型数据的命令。(只要数据不能保存到磁盘就可以了。但我找不到这样做的方法。)
- 直接在模型上进行验证,可能由
Resource
. (这是验证策略的一个很大的变化。在这个阶段似乎无法跟踪源 GUI 控件。)
这些解决方案要么看起来不可能,要么有严重的缺点。
即使存在验证错误,使撤消工作的最佳方法是什么?
注意:我接受 Mad Matts 的回答,因为他们的建议引导我找到解决方案。但我对此并不满意,我希望有一个更好的。
如果有人在某个时候找到了更好的解决方案,我很乐意考虑接受它而不是当前的解决方案!