【发布时间】:2015-01-13 10:58:34
【问题描述】:
在 TreeViewer 中为 treeColumn 使用 EditingSupport 时,有什么方法可以反映视图中的更改而不是更改模型然后使用 getViewer().update(element,null);
详情: 我想实现以下功能: 显示带有 |Object| 的树视图(组合框)属性| 选择并单击按钮后,我想向用户显示更改的摘要,然后单击确认后,我想将这些更改应用于模型(对象)
我正在使用 TreeViewer,其中我有一个启用了 EditingSupport 的列。 每当我从 ComboBox 中选择一个值并单击其他位置(lostFocus 类型)时,Value 都会设置为默认值。 我发现在调用 SetValue() 之后再次调用 TreeLabelProvider(使用调试点) 有什么办法可以只反映视图中的更改而不是更改模型并使用 getViewer().update(element,null);
一些仅供参考: 包对象包含多个版本
ContentProvider 负责获取对象
LabelProvider 从包(String[]) 中获取所有版本并显示第一个。
//创建用户界面的代码 // 废话
TreeViewerColumn column2 = new TreeViewerColumn(treeViewer, SWT.LEFT);
column2.getColumn().setText("Version");
column2.getColumn().setWidth(130);
treeViewer.setLabelProvider(new PackageUpdateTreeLabelProvider());
EditingSupport exampleEditingSupport = new OperationEditingSupport(
column2.getViewer());
column2.setEditingSupport(exampleEditingSupport);
OperationEditingSupport 类
private class OperationEditingSupport extends EditingSupport {
private ComboBoxCellEditor cellEditor = null;
private OperationEditingSupport(ColumnViewer viewer) {
super(viewer);
cellEditor = new ComboBoxCellEditor(
((TreeViewer) viewer).getTree(), new String[] {},
SWT.READ_ONLY);
}
@Override
protected CellEditor getCellEditor(Object element) {
// TODO Auto-generated method stub
if (element instanceof IPackageInfo) {
IPackageInfo pkg = (IPackageInfo) element;
cellEditor.setItems(PackageMgrUtil.getInstance().getVersions(
(IdmPackage) pkg, false, true));
return cellEditor;
}
return null;
}
@Override
protected boolean canEdit(Object element) {
return true;
}
@Override
protected Object getValue(Object element) {
// TODO Auto-generated method stub
return 0;
}
@Override
protected void setValue(Object element, Object value) {
/* only set new value if it differs from old one */
}
}
***************************************************
当我单击 column2 的单元格时,我得到组合框,但是当我选择某些内容并将焦点移至其他位置时。它再次显示默认值
在调试时我发现: 它再次调用标签提供者,它获取包的所有版本,然后显示第一个,因此我看不到任何变化。
我想要的是它应该在不改变底层对象的情况下保持选择不变。
感谢您的帮助。
【问题讨论】:
-
请出示您拥有的代码,并准确说明哪些部分不起作用。
-
树和模型应该始终同步