Eclipse rcp 如何在TreeViewer中正确使用EMF数据绑定
我想将我的EMF模型绑定到Eclipse rcp 如何在TreeViewer中正确使用EMF数据绑定,eclipse-rcp,jface,eclipse-emf,Eclipse Rcp,Jface,Eclipse Emf,我想将我的EMF模型绑定到TreeViewer。我的模型如下所示: Facility : Name - Part : Name - SubPart : SubPartName - SubSubPart : SubSubPartName - SubSubPart : SubSubPartName - SubSubPart : SubSubPartName - SubPart : SubPartN
TreeViewer
。我的模型如下所示:
Facility : Name
- Part : Name
- SubPart : SubPartName
- SubSubPart : SubSubPartName
- SubSubPart : SubSubPartName
- SubSubPart : SubSubPartName
- SubPart : SubPartName
- Part : Another Name
- SubPart : SubPartName
我遵循了Tom Schindl的教程,但我仍然不理解如何实现TreeFactoryImpl
。目前看来是这样的:
Facility : Name
- Part : Name
- SubPart : SubPartName
- SubSubPart : SubSubPartName
- SubSubPart : SubSubPartName
- SubSubPart : SubSubPartName
- SubPart : SubPartName
- Part : Another Name
- SubPart : SubPartName
@覆盖
公共IObservable createObservable(对象目标){
if(IObservableList的目标实例){
返回(IObservable)目标;
}else if(设施的目标实例){
IEMFListProperty multi=EMFProperties.multiList(ModelPackage.Literals.FACILITY\uu NAME);
返回多个观察(目标);
}else if(零件的目标实例){
IEMFListProperty multi=EMFProperties.multiList(ModelPackage.Literals.PART\u NAME);
返回多个观察(目标);
}
返回null;
}
问题是只显示设备。现在这是一个奇迹,因为treestStructureAdvisor
似乎只接收字符串
我想完成的是:
1.) Update the TreeViewrt if new nodes are added
2.) Update the name label if the name is changed
摘自此处:此方法看起来与您正在使用的方法不同
private static class TreeFactoryImpl implements IObservableFactory {
private IEMFListProperty multi = EMFProperties.multiList(
WorkspacePackage.Literals.PROJECT_SPACE__PROJECT,
MetamodelPackage.Literals.PROJECT__MODEL_ELEMENTS);
public IObservable createObservable(final Object target) {
if (target instanceof IObservableList) {
return (IObservable) target;
} else if (target instanceof ProjectSpace) {
return multi.observe(target);
} else if (target instanceof Project) {
return multi.observe(target);
}
return null;
}
}
从我在那里看到的情况来看,对multilist的大多数示例调用都是使用两个列表进行的。您使用它有什么原因吗?以下方法有效:
@Override
public IObservable createObservable(Object target) {
if (target instanceof IObservableList) {
return (IObservable) target;
} else if (target instanceof Facility) {
IEMFListProperty list = EMFProperties.list(ModelPackage.Literals.FACILITY__SUBPARTS);
return list.observe(target);
} else if (target instanceof SUBPART) {
IEMFListProperty list = EMFProperties.list(ModelPackage.Literals.SUBPART__SUBPARTS);
return list.observe(target);
} else {
return null;
}
}
这里的关键是收听收藏。这解决了需求1(如果添加了新节点,则更新树视图)
之后,我添加了一个TreeLabelProvider,正如Tom Schindl在博客文章中所描述的那样。
这解决了要求2(如果名称发生更改,则更新名称标签)