2

我正在编写一个 RCP 应用程序并尝试使用数据绑定将 GUI 的控件与模型链接起来。这包括例如将数据绑定到表。

据我了解, org.eclipse.jface.databinding.viewers.ViewerSupport 是将模型绑定到表查看器的推荐方法。但是,这只允许我将数据作为文本放入表格中。我还想更改前景色和背景色以及某些单元格的字体,具体取决于其他可观察对象。如果我能以某种方式将 ITableFontProvider 或 ITableColorProvider 放入 ViewerSupport.bind(...) 产生的内容中,我也会很高兴。

到目前为止,我还没有找到一个很好的方法来做到这一点。我可以复制 ViewerSupport.bind() 的内容并用我自己的类覆盖 LabelProvider。这似乎有点乱。

我还可以在调用 ViewerSupport.bind 后检索 LabelProvider 并将其替换为也实现 ITableFontProvider 和 ITableColorProvider 的委托 LabelProvider。这让我创建了很多方法,这些方法除了将事情委托给另一个对象之外什么都不做。也不是很优雅。

这一切似乎都不是那么美好。知道如何以优雅的方式做到这一点吗?我是否忽略了一些工厂课程来做到这一点?

4

1 回答 1

0

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因此,您可以只使用此代码,但使用您的字体和颜色提供程序的子类。

于 2014-08-11T09:19:51.553 回答