有了 FireMonkey 框架,它不同于 VCL ,以往的数据感知控件不能放在它上面,所以 XE2 提供了 LiveBindings 功能作为替代方案。另外它也是个通用的基础设施,同样可用于传统的VCL 这里用一个极简化的例子说明它的意图,在窗体上放一个 edit 和一个 label,找到 label 的 LiveBindings 属性,选 New LiveBinding... ,再选择 TBindExpression  然后设置属性如图所示  这样就把 edit 的 text 属性和 label 的 caption 属性绑定起来了,不用写任何代码。运行后,会看到 label 的内容就是 edit 的 text 值,但是在 edit 中输入内容,label 却没有跟着变化,如果要重新获得 edit 的值,可以用代码:

Self.BindExpressionLabel11.Evaluate; //这个BindExpressionLabel11,就是刚才点 New LiveBinding... 时新建的对象。

BindExpressionLabel11 的 SourceComponent 属性,用于指定数据来源于哪里(哪个对象)。SourceExpression 属性,是一个表达式,示例中只是简单的写了 text,这个 text 就是 SourceComponent 的属性(也就是指 TEdit 的属性)。 还可以写这样的表达式:

text+'aaa'

name+text

但是却不能写 trim(text) 这样的表达式,不过我们可以用它的 OnAssignValue 事件来实现这个功能,这个事件在 Evaluate 时触发,表达式所计算出来的值被放在事件的 var Value: TValue 参数里,它是个var 的,所以可以修改它的值。

procedure TForm1.BindExpressionLabel1AssignValue(
AssignValueRec: TBindingAssignValueRec; var Value: TValue;
var Handled: Boolean);
begin
value:=trim(value.AsString);
end;

LiveBingings 也可以感知数据集,但是要在 FireMonkey 2D Application 环境下,在窗体上放一个 label,同样再找到 LiveBindings 属性,会发现它多了一项 Link to DB Field...  选择它,出现下面的图,这个界面里的树,描述了当前窗体上放置的数据集,和它的字段,设置好后,它看起来就象是个 TRzDbLabel 了,实时显示字段值,不需要象上面的例子那样写Evaluate()

LiveBindings --- 把对象之间的属性绑定起来的更多相关文章

  1. C#用反射实现两个类的对象之间相同属性的值的复制

    在进行实体转换操作的时候如果需要在对两个实体之间两个属性字段差不多相同的类要进行一个互相的转换,我们要把a对象的所有字段的值都复制给b对象,我们只能用b.属性=a.属性来写,如果属性字段太多的话,就要 ...

  2. Java不同对象之间复制属性

    // 导入包import org.springframework.beans.BeanUtils; /** * 调用工具复制2个对象之间的属性 2个JavaBean对象复制的属性名相同 * @para ...

  3. [转]C#利用反射实现两个类的对象之间相同属性的值的复制

    本文转自:https://blog.csdn.net/u013093547/article/details/53584591 在使用c#进行程序编写时,会遇到一个问题,两个属性字段差不多相同的类要进行 ...

  4. C#利用反射实现两个类的对象之间相同属性的值的复制

    http://blog.csdn.net/u013093547/article/details/53584591 今天在拷贝对象的时候,看着代码实在是有点烦,一堆一样的代码,还是找找有没有直接反射拷贝 ...

  5. 简单理解javascript中的原型对象,实现对之间共享属性和行为

    javascript中提供了构造函数.可以方便的创建对象. 典型的构造函数例如以下: function Person(name, age) { this.name = name; this.age = ...

  6. angular 组件学习-组件内属性绑定

    #组件内的属性(元素的属性)绑定(property binding) 应用场景:通过改变DOM元素的属性,动态显示/隐藏一个元素 知识点:HTML 属性与DOM属性的区别 改变HTMl属性,浏览器需要 ...

  7. js对象之间的继承

    js的对象之间的继承抛弃了原型与构造器的概念,而转为字面量对象之间进行属性拷贝的方式进行继承. 首先我们来写一个封装好的继承函数: function extend(parent){ var child ...

  8. JAVA中JavaBean对象之间属性拷贝的方法

    JAVA中JavaBean对象之间的拷贝通常是用get/set方法,但如果你有两个属性相同的JavaBean或有大部分属性相同的JavaBean,对于这种情况,可以采用以下几个简便方法处理. 下面对这 ...

  9. EasyUI 中 DataGrid 控件 列 如何绑定对象中的属性

    EasyUI 中 DataGrid 控件 是我们经常用到的控件之一, 但是 DataGrid 控件 在绑定显示列时却不支持对象属性绑定. 模型如下: public class Manager impl ...

随机推荐

  1. 使用pca/lda降维

    PCA主成分分析 import numpy as np import pandas as pd import matplotlib.pyplot as plt # 用鸢尾花数据集 展示 降维的效果 f ...

  2. 【网址】.net/dot net可再发行组件下载哪家强

    微软开发者文档中有篇文章包含了.net/dot net各版本下载全家福: https://msdn.microsoft.com/zh-cn/library/5a4x27ek.aspx 安全可靠.没有三 ...

  3. PAT 1092 To Buy or Not to Buy

    1092 To Buy or Not to Buy (20 分)   Eva would like to make a string of beads with her favorite colors ...

  4. 为iframe添加onclick事件

    如果页面上有iframe时,鼠标点击在iframe内时,包含iframe的document是不响应任何事件的, 例如: $("#iframe1").click(function() ...

  5. caffe安装

    安装caffe的时候一定要保持一个乐观的心态,不然容易放弃人生.由于自己是装完才写的,所以并没有截图. 平台:Window7 硬件:NVIDIV quaro M4000 软件:Visual Studi ...

  6. 跟随我在oracle学习php(7)

    盒子模型布局 盒子模型:每个标签都是一个盒子 计算宽高:box-sizing:border-box盒子的宽度就是设置的宽度,里面的内容自适应 从里到外:padding(内边距) Border(边框) ...

  7. 【Java集合系列一】ArrayList解析

    一.基础简介 1.ArrayList继承关系 2.底层用数组来存储数据,数据会在ArrayList创建的时候一并初始化.如果创建ArrayList的时候,没有设置容量,则会delay到第一次add数据 ...

  8. apache配置,apache直接打开文件而不下载问题

    apache什么用,如何下载的上面就不说了,apache的配置是一个非常复杂的工作,下面介绍最基本的apache配置吧,再介绍配置文件管理系统. 安装过后需修改配置: 修改httpd.conf配置文件 ...

  9. Ajax实战(原生)

    /** 之前一直在学习ajax,也拿jQuery写了很多,感觉还是写原生的对基础的理论理解的深刻.特此书写. * 得到ajax对象 */ function getajaxHttp() { var xm ...

  10. SharePoint REST API - 同步SharePoint列表项

    博客地址:http://blog.csdn.net/FoxDave 本篇只讲REST服务中的GetListItemChangesSinceToken这个东西.何谓同步呢,你也可以理解为增量变化,即 ...