`

Properties修改模型后更新视图

阅读更多

本文是在 http://winseclone.iteye.com/blog/1774307 基础上,实现模型属性值改变后更新视图。

 

在Eclipse-articles propertyviewsample.zip的例子中adaptableObject是一个View(ButtonElement封装了Button),模型属性值改变后会通过ButtonElementProperties.firePropertyChanged(String, Object)更新Button(视图)。

	protected void firePropertyChanged(String propName, Object value) {
		Button ctl = element.getControl();
		
		if (ctl == null) {
			// the GUIView is probably hidden in this case
			return;
		}
		
		if (propName.equals(PROPERTY_FONT)) {
			ctl.setFont(new Font (ctl.getDisplay(),new FontData((String)value)) );
			return;
		}
		if (propName.equals(PROPERTY_TEXT)) {
			ctl.setText((String)value);
			return;
		}
		
	}

 

 上例中的方式,会导致代码臃肿,且灵活性不高。

EMF采用观察者模式(listener)方式来提高代码的灵活性。EMF使用到org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider类来实现。

 

首先,通过eAdapters()注册到模型对象 [r1] 。AdapterFactoryContentProvider中包括了Viewer视图实例,同时实现了INotifyChangedListener。

 

其次,当模型属性改变时,通过模型的eAdapters()获得监听器,通知监听者更新视图TreeViewer。

 

通知监听器,更新视图:

 

 

++ ItemPropertySource适配了Properties视图需要的IPropertySource对象

org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider.getPropertySource(Object)

    |-org.eclipse.emf.edit.ui.provider.PropertySource.PropertySource(Object, IItemPropertySource)

 

参考:

r1:EMF监听实现:

http://www.vogella.com/articles/EclipseEMFNotification/article.html

http://wiki.eclipse.org/EMF/Recipes#Notification_Framework_Recipes

http://yiliner.iteye.com/blog/213846 (ContentAdapter会监听孩子的变化, 添加到notifier的时刻会递归添加到其孩子)

resource.eAdapters().add(contentAdapter); 
  • 大小: 46.8 KB
分享到:
评论

相关推荐

    java 开发实例 适合初学者 MVC模式 jsp的 增删改查 视图层+模型层+控制层

    - **修改(Update)**:用户编辑记录并提交,控制器获取修改后的数据,模型执行更新操作,更新成功后反馈给视图。 - **查询(Select)**:用户可以通过搜索条件获取数据,控制器处理查询请求,模型执行查询操作,将...

    基于适配器模式的RCP应用属性视图实现

    5. 关联视图和模型:在RCP应用中,你可以选择将属性视图与特定类型的模型对象关联。当用户在工作台中选择这种类型的对象时,属性视图会自动显示与该对象相关的属性。 6. 自定义属性:在适配器中,你可以根据需求...

    WPF_MVVM框架讲解及搭建.zip

    通过设置依赖属性(Dependency Properties),视图可以轻松地将自身属性绑定到视图模型的属性,实现数据的双向通信。 **3. 视图模型的角色** 视图模型是MVVM架构的关键组件,它实现了INotifyPropertyChanged接口,...

    E- 家園個人系統(MVC)

    视图的更新通常由控制器触发,但不直接修改模型数据,而是请求控制器进行操作。 3. **控制器(Controller)**:控制器作为模型和视图之间的桥梁,接收用户的输入并调用模型进行数据处理,然后更新视图。在E-家园...

    WPF MVVM开发框架

    视图通过数据绑定与视图模型关联,当视图模型中的数据发生变化时,视图会自动更新,反之亦然。 3. **视图模型(ViewModel)**:视图模型是模型和视图之间的桥梁,它实现了视图的数据和命令接口。视图模型包含与用户...

    GEF中属性页面的实现

    实现后的效果如图所示,满足了系统设计的需求,即点击处理器图形模型时能在属性视图中显示对应的硬件信息,同时在图形模型或属性视图中修改属性,另一端都会实时反映出变化。 在实际应用中,可以根据需求扩展属性...

    WpfMVVMExample.zip

    视图模型通过实现INotifyPropertyChanged接口来通知视图数据的变化,使得WPF能够自动更新界面。 在本示例中,你可能会看到以下关键点: - **数据绑定**:WPF的强大的特性之一就是数据绑定,它可以自动同步视图模型...

    springmvc基本配置及定时任务配置修改

    3. **创建配置文件**:通常,我们会创建一个 `DispatcherServlet-servlet.xml` 配置文件,其中定义了视图解析器、模型-视图对、控制器 beans 等。 4. **定义 Controller**:使用 `@Controller` 注解标记 Java 类作为...

    ssm集成项目,crm管理系统,crm.sql为数据库文件,使用时需要修改configmysql.properties输.zip

    它采用模型-视图-控制器(MVC)设计模式,分离了业务逻辑、数据和用户界面,使得Web应用的开发更加简洁。 3. **MyBatis**:是一个持久层框架,它允许开发者编写SQL语句并与Java对象映射,减少了手动编写JDBC代码的...

    PowerDesigner教程.pdf

    模型属性可以通过“Model”→“Model Properties”或在资源浏览器中双击模型来查看和修改。 **4. 创建Requirements Model的步骤** 1. 首先,关闭当前Workspace,然后新建一个。 2. 在新Workspace中,通过“File”...

    3D模型——物体贴图种类

    在 Dynamics Properties 卷展栏中,可以为动力学系统设置材质的动态参数,如弹性系数、静摩擦力、动摩擦力等。 在贴图的应用中,需要注意贴图的坐标参数的设置。如果赋予物体的材质中包含任何一种二维贴图时,物体...

    silverlight mvvm

    - **简化UI更新**:数据绑定使得视图模型的改变能够自动反映到视图上,减少手动操作。 - **利于团队协作**:不同团队成员可以专注于各自领域,如UI设计师专注于视图,而开发者专注于模型和视图模型。 ### 6. ...

    怎样修改cad标注文字大小.doc

    这样设置后,在图纸空间不管你把视图放大几倍,标注的尺寸还是不变的。 2. 在模型空间画好图,在图纸空间标注、出图。在图纸空间不同的比例图,用不同的视口。 3. 打开文字属性栏,修改文字高度和宽度比例就可以了。...

    advance steel 详图设置资料

    - 添加/重命名模型对象(Add/Rename Model Objects):增加新的模型对象或修改现有对象的名称。 - 管理模型对象列表(Manage the List of Model Objects):组织和管理模型对象列表。 #### 七、标注策略 1. **标注...

    PowerDesigner15.1操作手册

    - **Show composite view**(显示复合视图):展示包含多个视图的复杂模型视图。 - **Hide composite view**(隐藏复合视图):从当前视图中移除复合视图。 - **Find objects**(查找对象):搜索模型中的特定元素。...

    vs2012 的MVC4实例

    控制器可以调用模型来获取或更新数据,并决定显示哪个视图。控制器也是实现应用程序逻辑和路由决策的地方。 4. **MVC的优点** - **可测试性**:由于模型、视图和控制器的职责明确,可以轻松编写单元测试,确保代码...

    struts2 properties

    Struts2是一个流行的Java web应用框架,用于构建MVC(模型-视图-控制器)架构的应用程序。在Struts2中,`struts.properties`文件是核心配置文件,它位于应用的`classes`目录下,用于设定框架的行为和偏好。这个文件...

    如何实现双向绑定mvvm的原理实现

    Watcher接收到变化通知后,会执行预定义的更新函数,从而更新视图。 4. **MVVM 模式**: MVVM(Model-View-ViewModel)模式在Vue中得到了实现。ViewModel是Vue实例,它是Model(数据模型)和View(视图)之间的...

    3dsmax 修改器中英对照

    根据给定的信息,本文将详细介绍3ds Max修改器的相关知识点,...以上就是3ds Max中常见的修改器及其功能介绍,这些修改器可以帮助用户高效地创建和编辑3D模型。了解并熟练掌握这些修改器是成为一名优秀3D艺术家的基础。

    jsp servlet jdbc 例

    - 控制器(Controller):接收到用户的请求后,根据请求内容调用模型进行处理,并更新视图以反映变化。 **JSP、Servlet和JDBC的协同工作** 在JSP、Servlet和JDBC的联合使用中,通常采用以下工作流程: 1. 用户...

Global site tag (gtag.js) - Google Analytics