【问题标题】:How can i disable a button when the model is not updated?模型未更新时如何禁用按钮?
【发布时间】:2013-04-11 04:54:40
【问题描述】:
在我的 UI 中,我有 2 个文本字段和 2 个按钮。我正在使用 jface 数据绑定来绑定文本字段,并且我正在进行验证,并且根据验证成功,模型会更新,否则它不会更新。我希望我的按钮做出相应的响应。就像我的模型没有更新而不是我想禁用我的按钮一样。我不想做硬编码的另一件事。所以有什么方法可以不用硬编码。
以另一种方式,我想将一个按钮绑定到文本字段,以便当文本字段具有一些不需要的值时,应该禁用该按钮。另一方面,我正在对文本字段进行数据绑定,当文本字段没有正确的值,它不会更新其模型。然后我想在值不正确时禁用按钮,我可以这样做。任何指针对我都有很大帮助。
【问题讨论】:
标签:
java
data-binding
swt
jface
【解决方案1】:
你可以使用下面的监听器。将监听器添加到您的 Observable
org.eclipse.core.databinding.observable.value.IValueChangeListener
【解决方案2】:
经过一番研究,我发现我必须观察按钮的启用/禁用属性并将其与当前的 emf 数据绑定上下文绑定。我使用的函数的详细信息如下:
void bindEnablementButtonToValidationStatus(Button button, EMFDataBindingContext ctx) {
IObservableValue buttonEnable = SWTObservables.observeEnabled(button);
IObservableValue validationStatus = new AggregateValidationStatus(
ctx.getValidationRealm(),
ctx.getBindings(),
AggregateValidationStatus.MAX_SEVERITY);
ctx.bindValue(buttonEnable, validationStatus,
new EMFUpdateValueStrategy(
UpdateValueStrategy.POLICY_NEVER),
new EMFUpdateValueStrategy().setConverter(
new Converter(IStatus.class, Boolean.TYPE) {
public Object convert(Object fromObject) {
return new Boolean(((IStatus)fromObject).isOK());
}
}));
}