我正在使用RCP中的属性视图,即org.eclipse.ui.views.properties.PropertySheet
。
我希望能够以编程方式刷新这些属性的内容。似乎RCP面向的用例只有在选择发生变化时才会发生变化。
有什么方法可以触发一个虚拟事件来刷新它(没有丑陋的UI工件,比如在部件之间明显切换)?
答案 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);
}