2010-06-04 49 views
3

我正在使用RCP中的属性视图,即org.eclipse.ui.views.properties.PropertySheet如何刷新Eclipse RCP中的属性视图?

我希望能够以编程方式刷新这些属性的内容。看起来RCP适用于仅在选择发生变化时才发生更改的用例。

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

回答

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; 
    } 
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); 
}