インデックス付きプロパティをJFaceComboViewerにバインドしたいと思います。
次のようなDataModelクラスがあるとしましょう。
class DataModel {
private String[] props = {"A","B","C"};
private PropertyChangeSupport pcs = new PropertyChangeSupport(this);
public String getProperties( int idx ){
return props[idx];
}
public void setProperties( int idx, String value ){
String oldVal = props[idx];
props[idx] = value;
pcs.fireIndexedPropertyChange( "properties", idx, oldVal, value );
}
// code to add/remove PropertyChangeListener
// ...
}
単純なプロパティのデータバインディングコードは次のようになります。
DataModel dataModel = ...
ComboViewer propertyChoice = ...
DataBindingContext ctx = new DataBindingContext();
IObservableValue target = ViewerProperties.singleSelection().observe( propertyChoice );
IObservableValue model = BeanProperties.value( DataModel.class, "properties" ).observe(dataModel);
ctx.bindValue( target, model );
しかし、インデックス付きのプロパティでは、バインドする値がどのインデックスであるかをctxに通知する必要があります。私が試してみました
IObservableValue model = BeanProperties.value( DataModel.class, "properties[0]" ).observe(dataModel);
しかし、それは機能しません。
単純なプロパティの代わりにインデックス付きプロパティをバインドすることは可能ですか?どのように?