В RCP Eclipse я создаю представления для Перспективного использования IPageLayout.addView(...)
Но этот путь у меня нет ссылки на представление. Поэтому я не знаю, как я могу сказать ViewA обновлять ViewB.
Что лучший шаблон должен использовать здесь?
Помимо того, что VonC упомянул выше, вы также можете использовать ISourceProviderListener
, если необходимые вам изменения не инициируются выбором.
ViewB
реализует ISourceProviderListener
ISourceProvider
и зарегистрируйте ее в службах ViewA
получите ISourceProvider
и обновите его, чтобы вызвать изменения в ViewB
Прочтите документацию по этим интерфейсам вместе с IServiceLocator
и ISourceProviderService
, чтобы лучше понять, как это все разыгрывается.
Вы также можете увидеть этот учебник Ларса Фогеля , в котором есть пример использования ISourceProvider
У вас есть различные парадигмы связи, обобщенные в статье IBM
ISelectionListener
и должен зарегистрироваться на странице рабочего стола IAdaptable
: Класс, реализующий IAdaptable
, имеет возможность динамического возврата определенных типов адаптеров, которые затем могут использоваться для получения дополнительной информации. Что касается первого подхода, подробности в статье:
Более разумным способом потребления выбора интерфейса пользователя является регистрация взглядов потребителя в качестве слушателей конкретных частей просмотра. Как видно из приведенного ниже примера, ID части представления источника упоминается в качестве параметра при регистрации слушателя выбора.
getSite().getPage().addSelectionListener("SampleViewId",(ISelectionListener)this);
Этот подход устранит избыточные обратные вызовы потребительского вида, которые в противном случае возникли бы, если бы этот вид был зарегистрирован как неспецифический слушатель.
Фрагмент кода в Листинге 2 показывает
createPartControl()
метод вида, который создаетJFace
TableViewer
и добавляет его в качестве провайдера выбора на сайт рабочего стола. Этот код позволяет любому изменению выбора пользовательского интерфейса вTableViewer
распространяться на страницу и, в конечном счете, на интересующие потребителя взгляды.Листинг 2. Настройка провайдера выбора
public void createPartControl(Composite parent) {
// Set up a JFace Viewer
viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
viewer.setContentProvider(new ViewContentProvider());
viewer.setLabelProvider(new ViewLabelProvider());
viewer.setSorter(new NameSorter());
viewer.setInput(getViewSite());
// ADD the JFace Viewer as a Selection Provider to the View site.
getSite().setSelectionProvider(viewer);
}
Аналогичный подход вы найдете в RCP tutorial for eclipse3.5 (обновление от 4 февраля 2010 г.)