У меня есть редактор в RCP Program, который содержит TableViewer
. Содержимое TableViewer
может быть обновлено в результате Action
в редакторе. Это в настоящее время осуществляется путем создания нового ввода и вызоваJFace TableViewer - как правильно fireSelectionChanged() после вызова setInput (...)?
tableViewer.setInput(updatedInput);
К сожалению, это не посылает SelectionChangedEvent
пока либо редактор не теряет фокус или новый выбор сделан в таблице. Это приводит к неприятностям в Command
, который получает текущий выбор через HandlerUtil.getCurrentSelection(event)
-
ISelection oldSelection = tableViewer.getSelection();
Collection<Foo> newFoos = fooAction.createNewFoos();
tableViewer.setInput(newFoos);
...
...//call an action.
...//Inside the action:
Collection<Foo> selectedFoos = HandlerUtil.getCurrentSelection(event).toList();
//No good! We get the unchanged selection back!
Я вижу два пути решения этой проблемы. Итерация через вход и настройка существующих объектов вместо вызова setInput()
, вероятно, будет работать, но в моем случае это не вариант. Вместо этого я хочу вызвать SelectionChangedEvent
, который получит HandlerUtil
, чтобы обновить его переменную currentSelection
. В настоящее время я получаю, чтобы это произошло, как это:
ISelection oldSelection = tableViewer.getSelection();
Collection<Foo> newFoos = fooAction.createNewFoos();
tableViewer.setInput(newFoos);
ISelection selection = tableViewer.getSelection();
tableViewer.setSelection(null);
tableViewer.setSelection(selection);
Это работает, так как изменения выбора, какие силы события, чтобы быть отстреливается. Но это также уродливый взлом, и даже с комментарием я думаю, что это потенциально может смутить любого, кто смотрит на этот кусок кода в будущем.
Так что со всем этим в стороне, есть ли способ получить TableViewer
для стрельбы SelectionChangedEvent
? Могу ли я заставить это автоматически произойти с правильным ContentProvider
? Или я могу как-то выполнить это, уволив изменение свойства из представления или редактора?
Любые советы были бы высоко оценены!