2017-09-27 7 views
0

AggregateValidationStatusにはIChangeListenerがあります。リスナーは、私が選択/変更するたびに呼び出され、必要なコンポーネントです。私が持っている唯一の問題は、ChangeListenerの冒頭にMultiValidatorvalidate()メソッドをトリガーしなければならないということです。残念ながら、非常に低い文書があり、私が見つけたものは私を助けませんでした。AggregateValidationStatusのChangeListenerのJFace/Eclipseデータバインディングトリガーマルチバリューイター

マイChangeListener

final AggregateValidationStatus aggregateValidationStatus = new AggregateValidationStatus(
     dataBindingContext.getBindings(), AggregateValidationStatus.MAX_SEVERITY); 
aggregateValidationStatus.addChangeListener(new IChangeListener() { 
    public void handleChange(ChangeEvent event) { 
     //Here I have to trigger the MultiValidator to return either OK or ERROR 
     boolean formIsValid = true; 
     aggregateValidationStatus.getValue(); 
     for (Object o : dataBindingContext.getBindings()) { 
      Binding binding = (Binding) o; 
      IStatus status = (IStatus) binding.getValidationStatus().getValue(); 
      if (!status.isOK()) { 
       formIsValid = false; 
      } 

      Control control = null; 
      if (binding.getTarget() instanceof ISWTObservable) { 
       ISWTObservable swtObservable = (ISWTObservable) binding.getTarget(); 
       control = (Control) swtObservable.getWidget(); 
      } 
      if (binding.getTarget() instanceof CalendarComboObservableValue) { 
       CalendarComboObservableValue observable = (CalendarComboObservableValue) binding.getTarget(); 
       control = (Control) observable.getControl(); 
      } 

      if (binding.getTarget() instanceof IViewerObservable) { 
       IViewerObservable observable = (IViewerObservable) binding.getTarget(); 
       control = observable.getViewer().getControl(); 
      } 

      ControlDecoration decoration = decoratorMap.get(control); 
      if (decoration != null) { 
       if (status.isOK() || status.matches(Status.WARNING)) { 
        decoration.hide(); 
       } else { 
        decoration.setDescriptionText(status.getMessage()); 
        decoration.show(); 
       } 
      } 
     } 
     if (saveBtn != null) 
      saveBtn.setEnabled(formIsValid); 
    } 
}); 
+0

aggregateValidationStatusの作成方法をコードに追加できますか? –

+0

@TillmannSeidelがコード – XtremeBaumer

答えて

1

あなたAggregateValidationStatusだけdatBindingContextのバインディングを介して集約:

final AggregateValidationStatus aggregateValidationStatus = new AggregateValidationStatus(
    dataBindingContext.getBindings(), AggregateValidationStatus.MAX_SEVERITY); 

MultiValidatorは、単一の結合ではなく全体の文脈に接続されていません。あなたはAggregateValidationStatusも同様MultiValidator Sを監視したいのであれば、あなたは別のコンストラクタを使用する必要があります。

final AggregateValidationStatus aggregateValidationStatus = new AggregateValidationStatus(
    dataBindingContext, AggregateValidationStatus.MAX_SEVERITY); 

これはMultiValidatorhandleChangedでsuperfluentの手動トリガーを行う必要があります。

+0

を返信してくれました。返信いただきありがとうございました。それがうまくいくなら私は答えを受け入れるでしょう – XtremeBaumer

関連する問題