SWT Widgets 绑定问题

SWT Widgets problems with binding

我正在开发 Eclipse RCP 应用程序,我需要创建一个更大的对话框,我需要在其中处理数据绑定。使用 TextFields 可以很好地绑定。我对 2 个 SWT 小部件有问题 - Combo、Spinner。 在 Spinner 中会有数字,我也可以在其中书写。微调器仅使用字符串数组中的值。

我使用以下代码进行绑定:

private void doBinding(MyPartComposite comp) {
    /* code for spinner */
    IObservableValue model = PojoProperties.value(MyPart.class, "age").observe(comp.result); //$NON-NLS-1$
    ISWTObservableValue target = WidgetProperties.text(SWT.Modify).observe(comp.ageSpinner);
    UpdateValueStrategy targetToModel = new UpdateValueStrategy(UpdateValueStrategy.POLICY_CONVERT);
    this.dataBindingContext.bindValue(target, model, targetToModel, null);

    /* code for combo */
    model = PojoProperties.value(MyPart.class, "gender").observe(comp.result); //$NON-NLS-1$
    target = WidgetProperties.text(SWT.Modify).observe(comp.genderCombo);
    targetToModel = new UpdateValueStrategy(UpdateValueStrategy.POLICY_CONVERT);
    this.dataBindingContext.bindValue(target, model, targetToModel, null);

}

Spinner 没有文本 属性,而是将其绑定到其选择。下面的示例对我有用,我假设年龄 属性 是整数,性别是字符串。

IObservableValue observeSelectionAgeSpinnerObserveWidget = WidgetProperties.selection().observe(ageSpinner);
IObservableValue ageResultObserveValue = PojoProperties.value("age").observe(comp.result);
dataBindingContext.bindValue(observeSelectionAgeSpinnerObserveWidget, ageResultObserveValue, null, null);
//
IObservableValue observeSingleSelectionGenderCombo = ViewerProperties.singleSelection().observe(genderCombo);
IObservableValue genderResultObserveValue = PojoProperties.value("gender").observe(comp.result);
dataBindingContext.bindValue(observeSingleSelectionGenderCombo, genderResultObserveValue, null, null);

在这里你可以看到我的微调器和组合的代码,在微调器中应该可以手动编写文本。 Combo没有这种可能。感谢帮助。

    Spinner ageSpinner = new Spinner(myGroup, SWT.BORDER);
    ageSpinner.setMinimum(1);
    ageSpinner.setMaximum(100);
    GriData gd = new GridData();
    gd.horizontalAlignment = SWT.FILL;
    ageSpinner.setLayoutData(gd);

    ComboViewer genderCombo = new ComboViewer(myGroup, SWT.DROP_DOWN | SWT.READ_ONLY);
    gd = new GridData();
    gd.horizontalSpan = 2;
    gd.horizontalIndent = 10;
    gd.horizontalAlignment = SWT.FILL;
    gd.grabExcessHorizontalSpace = true;
    genderCombo.getControl().setLayoutData(gd);
    genderCombo.setContentProvider(ArrayContentProvider.getInstance());
    genderCombo.setInput(this.genders.toArray(new String[0]));