XWT - 数据绑定

     什么是数据绑定?

     数据绑定是在应用程序UI与业务逻辑之间建立连接的过程,当设置好绑定关系并提供正确通知方式后,数据值修改时,绑定到数据的元素会自动反应更改。

基本数据绑定示意图

     数据绑定实质上是目标与绑定源之间的桥梁,通常每个绑定都有四个组件:目标对象、目标属性、绑定源和绑定源的值的路径。比如要将Text的内容绑定到Person对象的name属性,目标对象就是Text组件、目标属性是text、绑定源的值是name,绑定源是Person对象。

 

     在数据绑定中还有数据流方向概念,也就是数据在目标对象和数据源对象之间的交换过程,在实际的应用开发中,你可能希望UI值数据更改后将数据通知给源对象,有时又不允许用户随便更改源数据,你可以通过设置Binding对象的Mode属性进行控制。比如

Text="{Binding ElementName=theOneWayTextBox, Path=Text, Mode=OneWay}"

     数据绑定支持多种数据流方向:

  •     OneWay: 更改源对象的属性会自动更新目标对象的属性,但是目标对象属性的更改不会传播回源对象属性。
  •     TwoWay:   更改源对象的属性会自动更新目标对象的属性,而目标对象的属性更改也会自动更新源对象属性。
  •     OneTime: 使用源对象属性初始化目标对象的属性,不再传播后续的更改(一次性的)。

     若要检查资源的更改情况,源对象必须得提供属性更改通知机制(PropertyChangeSupport)

 

触发源对象更新的原因

      使用TwoWay绑定监听目标对象属性的更改,并将这些更改传播给源对象,这称为更新源,但我们怎样指定在什么时候触发更新动作呢?比如在编辑文本框框内容时,是在编辑的时候更新还是在光标移开文本框后才进行更新呢?你可以使用UpdateSourceTrigger属性指定触发的条件

UpdateSourceTrigger 示意图

下面是UpdateSourceTrigger值的示例方案

UpdateSourceTrigger值 源对象值何时更新 应用场景
LostFocus 但Text组件失去焦点时 验证逻辑
PropertyChanged 修改Text组件内容时 用于聊天窗口输入框(显示用户输入清空)
Explicit 应用程序调用UpdateSource时 可修改的Text组件,点击提交按钮才更新数据源值

 

     创建绑定

      XWT提供了Binding对象建立绑定关系,下面将了解一下如何设置绑定。

       下面这个例子绑定了Person的类,该类在org.eclipse.e4.xwt.tests.databinding这个命名空间中定义。Person有个age的int类型属性,默认为10.

<Shell xmlns="http://www.eclipse.org/xwt/presentation" xmlns:x="http://www.eclipse.org/xwt"
xmlns:y="clr-namespace:org.eclipse.e4.xwt.tests.databinding" Size="400, 300"
DataContext="{StaticResource myData}">
<Shell.layout>
<GridLayout numColumns="3" />
</Shell.layout>

<Shell.Resources>
<y:Person x:Key="myData" />
</Shell.Resources>

<Label text="Name" />
<Text x:style="BORDER" text="{Binding Path=age}">
<Text.layoutData>
<GridData horizontalAlignment="FILL" grabExcessHorizontalSpace="true" />
</Text.layoutData>
</Text>
<Label text="{Binding Path=age}">
<Label.layoutData>
<GridData horizontalAlignment="FILL" grabExcessHorizontalSpace="true" />
</Label.layoutData>
</Label>
</Shell>

   数据绑定提供了默认的类型转换。默认采用OnWay方式。

   运行

    image_thumb5

 

 

 

参考资料:Data Binding Overview

posted @ 2011-07-14 15:05  vwpolo  阅读(676)  评论(0编辑  收藏  举报