ComboViewerにJFaceデータバインディングを使用したいのですが、これを正しく行う方法がわかりません。
それが私の現在の進歩です:
CCombo c= new CCombo(grpCpu, SWT.BORDER);
c.setEditable(false);
ComboViewer c_viewer = new ComboViewer(text_6);
c_viewer.setContentProvider(new ArrayContentProvider());
c_viewer.setLabelProvider(new LabelProvider() {
@Override
public String getText(Object element) {
return Activator.getSomeService().key2Value((Integer) element);
}
});
c.setInput(new int[]{1, 2, 3});
key2Valueメソッド(int値を文字列に変換するための単純なマップ):
public String key2Value(int key){
return someHashMap.get(key);
}
そしてデータバインディング:
// IObservableValue target = SWTObservables.observeSelection(c);
IObservableValue target = ViewersObservables.observeSingleSelection(c_viewer);
IObservableValue model = BeansObservables.observeValue(getInputObject(), "id");
ctx.bindValue(target, model, null, null);
バインディングはすでに正しく機能しています。UIでの選択が変更されると、モデルの値も変更されます。しかし、最初の選択はありません!
ここで本当に助けが必要です。事前にThx!
ちなみに、ビューアーではなくCComboをバインドすると、正しい初期選択があります(2番目のスニペットのコメント行を参照)。しかし、CComboボックスから他のアイテムを選択しても、モデルの値は変更されません。