如何在Sirius属性视图中正确配置Set operation?
属性视图值修改同步表格的Set操作配置方案
问题描述
基于自定义规则实现了表格模型与视图,同时创建了属性视图——选中表格行时会展示对应元素的详情。当前问题:修改属性视图文本框内的属性值后,无法同步更新到表格中。已添加Set操作,但配置存在问题。
相关信息
- 模型结构截图
- 属性视图界面截图
- 获取值的服务方法
service:getVal():
public String getVal(EObject context) { String toReturn = ""; if (context instanceof PropertyEntry entry) { IValueData data = (ValueData) entry.getValue(); toReturn = data.getData(); } return toReturn; }
- 尝试过的Set操作配置截图
- 设置值的服务方法
service:setVal(var:newValue):
public void setVal(EObject context, String newValue) { if (context instanceof PropertyEntry entry) { IValueData valueData = (ValueData) entry.getValue(); valueData.setData(newValue); } }
正确配置步骤
绑定上下文实例
确保Set操作的上下文与表格行对应的PropertyEntry实例一致,保证属性视图的选中对象能作为setVal方法的context参数传入。参数映射配置
在Set操作的配置界面:
- Operation字段选择
service:setVal(var:newValue)方法; - Parameter Mapping区域添加映射:
- 参数名填写
newValue,值来源选择UI Control Value(即当前文本框的输入值); context参数无需手动配置(多数框架会自动将选中的PropertyEntry作为上下文传入,若需手动设置则选择Selected Element作为值来源)。
- 参数名填写
- 添加模型更新通知
修改setVal方法,在更新数据后触发EObject的属性变更通知,让表格视图感知到数据变化:
public void setVal(EObject context, String newValue) { if (context instanceof PropertyEntry entry) { IValueData valueData = (ValueData) entry.getValue(); valueData.setData(newValue); // 添加变更通知,触发视图刷新 if (entry.eResource() != null) { entry.eResource().getNotificationService().notifyChanged(new NotificationImpl(NotificationImpl.SET, null, newValue) { @Override public EObject getNotifier() { return entry; } }); } } }
如果你的PropertyEntry或ValueData实现了Notify接口,也可以直接调用对应通知方法完成视图刷新触发。
- 验证方法签名匹配
检查Set操作配置中的方法签名是否与setVal完全一致,重点确认newValue的参数类型为String。
完成以上配置后,修改属性视图文本框的值时,会正确调用setVal更新数据并触发表格视图刷新,实现值的同步显示。
内容的提问来源于stack exchange,提问作者Marco Savini
相关产品推荐
相关产品推荐

