【问题标题】: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());
                                      }
                                  }));
      

      }

      【讨论】:

        猜你喜欢
        • 2021-01-27
        • 2020-08-29
        • 2016-02-25
        • 2011-02-19
        • 1970-01-01
        • 2017-03-06
        • 1970-01-01
        • 2017-03-11
        • 1970-01-01
        相关资源
        最近更新 更多