如何在模型未更新时禁用按钮?

时间:2013-04-11 04:54:40

标签: java data-binding swt jface

在我的UI中,我有2个文本字段和2个按钮。我正在使用jface数据绑定来绑定文本字段,我正在进行验证,并且根据验证成功,模型会更新,否则它将不会。希望我的按钮能够做出相应的响应。如果我的模型没有更新,就像我想要禁用我的按钮一样。更多的事情是我做了anot想要进行硬编码。如果没有硬编码,那还有什么办法。

另一方面,我想将一个按钮绑定到文本字段,以便当文本字段有一些不需要的值时,应该禁用该按钮。另一方面,我在文本字段上进行数据绑定,这将在文本字段没有正确的值,因为它不会更新它的模型。然后我想在值不合适时禁用按钮。我可以这样做。任何指针都对我有很大帮助。

2 个答案:

答案 0 :(得分:0)

您可以使用下面的监听器。将监听器添加到Observable

 org.eclipse.core.databinding.observable.value.IValueChangeListener

答案 1 :(得分:0)

经过一些研究,我发现我必须观察按钮的启用/禁用属性并将其与当前的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());
                                }
                            }));

}