Eclipse 中的 JFace 数据绑定,第 3 部分: 使用高级功能(14/19)

本文介绍了如何在ContactPresentationModel中使用间接引用(indirection)来实现表单与数据模型之间的解耦,通过绑定机制更新视图和数据模型。
 
前一页第 14 页,共 19 页后一页


对本教程的评价

帮助我们改进这些内容


引入 indirection

最后还需要做的是将选项从表挂接到 ContactPresentationModel 上以供查看。维基百科将计算机编程中的 indirection 定义为 “使用名称、引用或容器而不是值本身进行引用的能力”。通过绑定到稍后将填入的占位符上,可以将此方法与 ContactFormContactPresentationModel 结合使用。将其重构,以便 Contact 变量现在就替换 IObservable value。根据成为 contactObservable 的需要更改变量和方法名称。更改后会导致出现一些编译错误。修正 enablementChangeListener 并用清单 22 中的代码进行测试。



清单 22. 将 TablePresentation 模型与 ContactPresentationModel 连接起来
                    
if (!getEnableYearsMarried()) {
    Contact contact = (Contact) /
    getContactObservable().getValue();
    if (contact != null) {
        contact.setYearsMarried(null);
        contact.setSpouse(null);
    }
}

. . . 

ContactPresentationModel presentationModel = new 
ContactPresentationModel(
        new WritableValue(Contact.class));
presentationModel.getContactObservable().setValue(contact);

assertFalse(presentationModel.getEnableYearsMarried());

presentationModel.setEnableYearsMarried(true);
contact.setSpouse("spouse");
contact.setYearsMarried("5");
presentationModel.setEnableYearsMarried(false);

assertNull(contact.getSpouse());
assertNull(contact.getYearsMarried());

现在需要修正 ContactForm。确保先前的 getContact() 方法已被重构为 getContactObservable()。因为现在要绑定到 IObservableValue 而不是直接绑定到 Contact 对象,因此在绑定时必须更加明确这一点。修改 namespouseyearsMarriedProperty 对象构造函数以使第三个实参为 String.class,第四个实参为 false。这样做将指定将要绑定到的属性的类型和它不是集合的事实。最后,通过将 ContactForm 构造函数更改为从 TablePresentationModel 获取 WritableValue 实例,来修正示例运行程序中的错误。

再次运行示例。注意表的第一个值已被选中并且显示在下面的表单中。如果更改 Name 字段的值,则表中该字段的值也将更改。更改表中的选项将更改表单中显示的对象。


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值