我正在编写RCP应用程序,并尝试使用数据绑定将GUI的控件与模型链接。例如,这包括将数据绑定到表。
据我了解,org.eclipse.jface.databinding.viewers.ViewerSupport是将模型绑定到表查看器的推荐方法。但是,这仅允许我将数据作为文本放入表中。我还想更改前景色和背景色以及某些单元格的字体,具体取决于其他可观察对象。如果我能以某种方式将ITableFontProvider或ITableColorProvider插入ViewerSupport.bind(...)生成的内容,我也很高兴。
到目前为止,我还没有找到一种好的方法。我可以复制ViewerSupport.bind()的内容,并使用自己的类覆盖LabelProvider。这似乎有点混乱。
在调用ViewerSupport.bind之后,我还可以检索LabelProvider并用委派的LabelProvider替换它,该实现还实现了ITableFontProvider和ITableColorProvider。这使我创建了很多方法,它们除了将事情委托给另一个对象外什么也不做。也不是很优雅。
所有这些似乎都不太好。任何想法如何以优雅的方式做到这一点?我可以忽略一些工厂课程吗?
最佳答案
ViewerSupport
只是基于各种数据绑定内容和标签提供程序提供了简化的方法。当ViewerSupport
无法提供您想要的内容时,直接使用这些内容和标签提供程序是完全可以接受的。
例如,ViewerSupport.bind(StructuredViewer viewer, IObservableList input, IValueProperty[] labelProperties)
只是:
ObservableListContentProvider contentProvider = new ObservableListContentProvider();
if (viewer.getInput() != null)
viewer.setInput(null);
viewer.setContentProvider(contentProvider);
viewer.setLabelProvider(new ObservableMapLabelProvider(Properties
.observeEach(contentProvider.getKnownElements(),
labelProperties)));
if (input != null)
viewer.setInput(input);
因此,您可以只使用此代码,但将
ObservableMapLabelProvider
的子类与字体和颜色提供程序一起使用。