Data binding 使定制的小部件可见?

Data binding 使定制的小部件可见?,data-binding,eclipse-rcp,jface,Data Binding,Eclipse Rcp,Jface,我创建了一个简单的关键字突出显示编辑器,它只包装了一个StyledText小部件: 公共类SQLSegmentEditor扩展了复合{ 私有样式文本st; 公共SQLSegmentEditor(复合父级){ 超级(母公司,SWT.无); this.setLayout(新的FillLayout()); st=新样式文本(这是SWT.WRAP | SWT.BORDER | SWT.V|滚动); st.addLineStyleListener(新的SQLSegmentLineStyleListener

我创建了一个简单的关键字突出显示编辑器,它只包装了一个
StyledText
小部件:

公共类SQLSegmentEditor扩展了复合{
私有样式文本st;
公共SQLSegmentEditor(复合父级){
超级(母公司,SWT.无);
this.setLayout(新的FillLayout());
st=新样式文本(这是SWT.WRAP | SWT.BORDER | SWT.V|滚动);
st.addLineStyleListener(新的SQLSegmentLineStyleListener());
}
}
我如何才能使它可以用于数据绑定?我正在寻找正确的方法,而不仅仅是一个使它工作的方法

我想观察内部
样式文本的文本内容


例如:我可以添加一个
getStyledText
方法来返回包装的
StyledText
小部件,以便在数据绑定中使用它。但这将带来风险。为了保持我的编辑器行为正确,我应该让客户端代码看不到
StyledText
小部件。

虽然我不理解您不向客户端公开包装的小部件的论点,但这里有一个可能的解决方案。小部件可以提供一个
可写值
,该值可以由客户端通过数据绑定直接绑定。这意味着绑定涉及三方:客户机目标、包装可写值和SWT源。唯一的缺点是您直接依赖于小部件中的数据绑定。这里是一个片段

import org.eclipse.core.databinding.DataBindingContext;
导入org.eclipse.core.databinding.observable.value.WritableValue;
导入org.eclipse.jface.databinding.swt.iswtobservevalue;
导入org.eclipse.jface.databinding.swt.WidgetProperties;
导入org.eclipse.swt.swt;
导入org.eclipse.swt.custom.StyledText;
导入org.eclipse.swt.layout.FillLayout;
导入org.eclipse.swt.widgets.Composite;
公共类SQLSegmentEditor扩展了复合{
私有最终样式文本st;
私有最终可写值=新的可写值();
公共SQLSegmentEditor(复合父级,DataBindingContext ctx){
超级(母公司,SWT.无);
断言ctx!=null;
setLayout(新的FillLayout());
st=新样式文本(这是SWT.WRAP | SWT.BORDER | SWT.V|滚动);
ISWTObservalEvalue swtBinding=WidgetProperties.text(SWT.Modify)
.观察(st);
ctx.bindValue(值,swtBinding);
}
公共可写值getValue(){
返回值;
}
}
因此,客户端代码如下所示:

DataBindingContext ctx=newdatabindingcontext();
SQLSegmentEditor SQLSegmentEditor=新的SQLSegmentEditor(getParent(),ctx);
IObservableValue modelObservable=//设置我的模型observable
bindValue(modelObservable,sqlSegmentEditor.getValue());

受您答案的启发,我添加了一个返回IObservableValue的方法。