我正在编写一个 RCP 应用程序并尝试使用数据绑定(bind)将 GUI 的控件与模型链接起来。这包括例如将数据绑定(bind)到表格。
据我所知,org.eclipse.jface.databinding.viewers.ViewerSupport 是将模型绑定(bind)到表查看器的推荐方法。然而,这将只允许我将数据作为文本放入表中。我还想更改前景色和背景色以及某些单元格的字体,具体取决于其他可观察值。如果我能以某种方式将 ITableFontProvider 或 ITableColorProvider 放入 ViewerSupport.bind(...) 生成的内容中,我也会很高兴。
到目前为止,我还没有找到一个很好的方法来做到这一点。我可以复制 ViewerSupport.bind() 的内容并用我自己的类覆盖 LabelProvider。这看起来有点乱。
我还可以在调用 ViewerSupport.bind 后检索 LabelProvider 并将其替换为委托(delegate) LabelProvider,它也实现了 ITableFontProvider 和 ITableColorProvider。这让我创建了许多方法,这些方法除了将事情委托(delegate)给另一个对象外什么都不做。也不是很优雅。
所有这些似乎都不太好。知道如何以优雅的方式做到这一点吗?我是否忽略了一些工厂类来做到这一点?
最佳答案
ViewerSupport
仅提供基于各种数据绑定(bind)内容和标签提供程序的简化方法。当 ViewerSupport
没有提供您想要的内容时,直接使用这些内容和标签提供程序是完全可以接受的。
例如,ViewerSupport.bind(StructuredViewer 查看器,IObservableList 输入,
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
的子类与您的字体和颜色提供程序一起使用。
关于java - ViewerSupport 和 ITableColorProvider 或 ITableFontProvider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25239279/