2010-06-04 75 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); 
}