班级ValueBinding
有两个UpdateValueStrategy
(目标是模型和模型到目标),它们都有一个转换器和三个验证器(" get","在转换"和"之后设置")。
ListBinding
及其UpdateListStrategy
s没有任何类型,只有一个转换器(而且我不确定这个东西是否打开)。我希望实现与UpdateValueStrategy
验证器类似的功能,以验证列表中是否至少有一个元素。
我尝试了什么(以及我如何失败):
ListBinding.doUpdate(...)
- 它是私人的ListBinding.validationStatusObservable
添加更改侦听器并在设置后进行验证 - 我无法判断更新是否为模型 - >目标或目标 - >模型,所以我不知道应该验证哪个列表有效的是创建针对新WritableValue
的第二个绑定并为其添加验证器。但这并不是最佳选择。我宁愿拥有一个在验证失败时不会更新的绑定。
我确定某人之前必须遇到同样的问题,因此问题是:如何向IValidator
添加ListBinding
?
答案 0 :(得分:0)
所以我做了我自己的UpdateListStrategy
(带着二十一点和......没关系):
public class BetterUpdateListStrategy extends UpdateListStrategy {
@Override
protected IStatus doAdd(IObservableList observableList, Object element, int index) {
IStatus result = super.doAdd(observableList, element, index);
if (result.isOK()) {
result = validate(observableList);
}
return result;
}
// these methods are overridden in exactly the same way:
// protected IStatus doMove(IObservableList observableList, int oldIndex, int newIndex)
// protected IStatus doRemove(IObservableList observableList, int index)
// protected IStatus doReplace(IObservableList observableList, int index, Object element)
private IStatus validate(IObservableList value) {
// my validation; I added an IValidator to have a similar API
// to the UpdateValueStrategy
return Status.OK_STATUS;
}
}
它尚未完美运行(如果验证失败,绑定没有错误状态),但这可能有助于其他人。