如何刷新Eclipse RCP中的属性视图?

时间:2010-06-04 11:13:11

标签: events properties eclipse-rcp

我正在使用RCP中的属性视图,即org.eclipse.ui.views.properties.PropertySheet

我希望能够以编程方式刷新这些属性的内容。似乎RCP面向的用例只有在选择发生变化时才会发生变化。

有什么方法可以触发一个虚拟事件来刷新它(没有丑陋的UI工件,比如在部件之间明显切换)?

2 个答案:

答案 0 :(得分:3)

主要问题是API隐藏了属性视图中的所有页面(PropertySheetPage),因此隐藏了查看器(PropertySheetViewer)。

好消息是,您可以告诉属性视图使用您想要的页面。所以我提供了默认情况下通常使用的页面(PropertySheetPage),除非我提供它,我保持对它的引用(显然),然后你可以调用propertySheetPageRef.refresh()来更新模型(谢天谢地,这个方法)是公开的。)

public Object getAdapter(Class adapter) {
        if (adapter == IPropertySource.class) {
            return resultProvider;
        } else if (adapter == IPropertySheetPage.class) {
            return propertySheetPage;
        }
        return null;
    }

答案 1 :(得分:2)

对geejay的答案进行更正:getAdapter方法位于视图中(不在您显示属性的对象中)。

示例实现(在视图的类中):

//IPropertySheetPage doesn't implement refresh()
private PropertySheetPage propertyPage;

/**
 * If called from UI thread, refreshes property page from model
 * (an IPropertySource). If called from non-UI thread, does nothing.
 */
public void refreshPropertyPage() {
    if (propertyPage != null) {
        propertyPage.refresh();
    }
}

@Override
public Object getAdapter(Class adapter) {
    if (adapter == IPropertySheetPage.class) {
        if (propertyPage == null) {
            propertyPage = new PropertySheetPage();
        }
        return propertyPage;
    }
    //use platform's adapter manager for other classes
    return super.getAdapter(adapter);
}