准备用 TBindingsList 重做上一个例子.

可以先把 TBindingsList 理解为是一组绑定表达式(TBindExpression)的集合;
官方应该是提倡在设计时完成 TBindExpression 的建立与参数设置, 但我觉得看运行时的代码会更容易理解.

1、先在窗体上添加 TrackBar1、Edit1、Label1、BindingsList1;
2、激活窗体和 TrackBar1 的默认事件;
3、然后将通过代码把 TrackBar1.Value 分别绑定到 Edit1.Text、Label1.Text, (这里把 TrackBar1 做源控件, 把 Edit1、Label1 做目标控件).


unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, Data.Bind.EngExt,
  Fmx.Bind.DBEngExt, Data.Bind.Components, FMX.Edit; type
  TForm1 = class(TForm)
    TrackBar1: TTrackBar;
    Edit1: TEdit;
    Label1: TLabel;
    BindingsList1: TBindingsList;
    procedure FormCreate(Sender: TObject);
    procedure TrackBar1Change(Sender: TObject);
  end; var
  Form1: TForm1; implementation {$R *.fmx} procedure TForm1.FormCreate(Sender: TObject);
begin
  {给 BindingsList1 添加表达式, 并设置参数}
  with TBindExpression.Create(BindingsList1) do
  begin
    ControlComponent := Edit1;    //目标控件
    ControlExpression := 'Text';  //目标控件属性
    SourceComponent := TrackBar1; //源控件
    SourceExpression := 'Value';  //源控件属性
    Active := True;              //激活; 可以通过 Active := False 断开绑定
  end;   with TBindExpression.Create(BindingsList1) do
  begin
    ControlComponent := Label1;
    ControlExpression := 'Text';
    SourceComponent := TrackBar1;
    SourceExpression := 'Value';
    Active := True;
  end;
end; {在 TrackBar1 的 OnChange 中发送通知}
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
  BindingsList1.Notify(Sender, ''); //这里也可以写作: BindingsList1.Notify(TrackBar1, 'Value');
end; end.

下面尝试在设计时完成以上工作:

1、先在窗体上添加 TrackBar1、Edit1、Label1;
2、从 Edit1 的右键菜单 New LiveBinding...(从 Strucure 窗口 Edit1 的右键菜单、或从 Object Inspector 窗口的 LiveBindings 添加均可);
3、确认添加 TBindingExpression, 其默认名称会是: BindExpressionEdit11, (此时也会有 BindingsList1 被自动添加);
4、选定刚刚添加的 BindExpressionEdit11, 设置属性:

   ControlComponent : 'Edit1'
  ControlExpression: 'Text'
  SourceComponent  : 'TrackBar1'
  SourceExpression : 'Value'

5、重复步骤 2..4 同样设置 Label1
6、在 TrackBar1 的 OnChange 事件中写上一句: BindingsList1.Notify(Sender, '');
7、运行.



使用 System.Bindings.Helper 单元中 TBindings 类的静态方法实现如上绑定(先在窗体上添加 TrackBar1、Edit1、Label1):

unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.Edit; type
  TForm1 = class(TForm)
    TrackBar1: TTrackBar;
    Edit1: TEdit;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure TrackBar1Change(Sender: TObject);
  end; var
  Form1: TForm1; implementation {$R *.fmx} uses System.Bindings.Expression, System.Bindings.Helper; procedure TForm1.FormCreate(Sender: TObject);
begin
  TBindings.CreateManagedBinding(
    [TBindings.CreateAssociationScope([Associate(TrackBar1, 'Input1')])],
    'Input1.Value',
    [TBindings.CreateAssociationScope([Associate(Edit1, 'Output1')])],
    'Output1.Text',
    nil
  ); //其中的 Input1、Output1 都是随意的, 前后一致即可   TBindings.CreateManagedBinding(
    [TBindings.CreateAssociationScope([Associate(TrackBar1, 'Input1')])],
    'Input1.Value',
    [TBindings.CreateAssociationScope([Associate(Label1, 'Output1')])],
    'Output1.Text',
    nil
  );
end; procedure TForm1.TrackBar1Change(Sender: TObject);
begin
  TBindings.Notify(Sender, '');
end; end.

Delphi XE2 之 FireMonkey 入门(23) - 数据绑定: TBindingsList: TBindExpression的更多相关文章

  1. Delphi XE2 之 FireMonkey 入门(30) - 数据绑定: TBindingsList: TBindExpression 的 OnAssigningValue 事件

    Delphi XE2 之 FireMonkey 入门(30) - 数据绑定: TBindingsList: TBindExpression 的 OnAssigningValue 事件 表达式中的函数有 ...

  2. Delphi XE2 之 FireMonkey 入门(24) - 数据绑定: TBindingsList: TBindExpression.Direction

    在学习 BindingSource 属性时, 可以让两个控件互为绑定源; TBindExpression 对应的功能是 Direction 属性. 先在窗体上添加 Edit1.Edit2.Bindin ...

  3. Delphi XE2 之 FireMonkey 入门(32) - 数据绑定: TBindingsList: TBindList、TBindPosition [未完成...]

    Delphi XE2 之 FireMonkey 入门(32) - 数据绑定: TBindingsList: TBindList.TBindPosition [未完成...] //待补...

  4. Delphi XE2 之 FireMonkey 入门(29) - 数据绑定: TBindingsList: 表达式的 Evaluate() 方法

    Delphi XE2 之 FireMonkey 入门(29) - 数据绑定: TBindingsList: 表达式的 Evaluate() 方法 TBindingsList 中可能不止一个表达式, 通 ...

  5. Delphi XE2 之 FireMonkey 入门(28) - 数据绑定: TBindingsList: 表达式函数测试: SelectedText()、CheckedState()

    Delphi XE2 之 FireMonkey 入门(28) - 数据绑定: TBindingsList: 表达式函数测试: SelectedText().CheckedState() 示例构想: 用 ...

  6. Delphi XE2 之 FireMonkey 入门(27) - 数据绑定: TBindingsList: TBindScope

    Delphi XE2 之 FireMonkey 入门(27) - 数据绑定: TBindingsList: TBindScope 如果在编写表达式时, 如果能够随意指认需要的控件就好了(通过 Owne ...

  7. Delphi XE2 之 FireMonkey 入门(26) - 数据绑定: TBindingsList: TBindExprItems

    Delphi XE2 之 FireMonkey 入门(26) - 数据绑定: TBindingsList: TBindExprItems 如果要给一对 "源控件" 和 " ...

  8. Delphi XE2 之 FireMonkey 入门(25) - 数据绑定: TBindingsList: 表达式的灵活性及表达式函数

    Delphi XE2 之 FireMonkey 入门(25) - 数据绑定: TBindingsList: 表达式的灵活性及表达式函数 绑定表达式中可以有简单的运算和字符串连接, 但字符串需放在双引号 ...

  9. Delphi XE2 之 FireMonkey 入门(31) - 数据绑定: 绑定数据库

    Delphi XE2 之 FireMonkey 入门(31) - 数据绑定: 绑定数据库 一.全设计时操作: 先在窗体上放置控件: DataSource1    : TDataSource; Clie ...

随机推荐

  1. 在Myeclipse下查看Java字节码指令信息

         在实际项目开发中,有时为了了解Java编译器内部的一些工作,需要查看Java文件对应的具体的字节码指令集,这里提供两种方式供参考. 一.使用javap命令      javap是JDK提供的 ...

  2. window-tree命令

    tree 以图形方式显示在驱动器中的目录结构或磁盘的路径. 有时候需要整理文档目录时,而文件太多,一个个去写相应的文件目录结构也不现实,就用到了window下的tree命令 语法 tree [< ...

  3. 表格变色示例中发现的问题——attr()与prop()

    在练习jQuery表格变色例子过程中,发现了一下几个问题: 在IEEdge浏览器中切换选中行会出现上一个表格行背景色被吃掉的情况: 在chrome中从上向下单击行中任意单元可以选中该行,而从下往上单击 ...

  4. Java web项目 本地配置https调试

    一.创建密匙 网上有很多教程,就不在此赘述了. 假设最后生成的密匙为tomcat.keystore 密码为123456. 二.配置tomcat 首先,将密匙移到tomcat下根目录下. 进入conf文 ...

  5. vlan的三种模式access、trunk、hybrid

    untag就是普通的ethernet报文,普通PC机的网卡是可以识别这样的报文进行通讯:tag报文结构的变化是在源mac地址和目的mac地址之后,加上了4bytes的vlan信息,也就是vlan ta ...

  6. Django模板层2

    一.单表操作 1.1 开启test from django.test import TestCase import os # Create your tests here. if __name__ = ...

  7. 026-Cinder服务-->使用NFS作为后端存储

    以下将介绍如何使用NFS共享作为Openstack后端存储,本案例在计算节点上配置nfs [root@linux-node2 ~]# yum install -y openstack-cinder p ...

  8. 开发过程中git的使用

    使用clone命令可以直接将git添加到本地库: 主要是针对分支的操作: 首先可以将创建一个属于自己的分支并往上面提交代码,最后合并到dev分支和master分支上面: 前提(master已经有一个文 ...

  9. DevExpress v19.1新版亮点——WinForms篇(二)

    行业领先的.NET界面控件DevExpress v19.1终于正式发布,本站将以连载的形式介绍各版本新增内容.在本系列文章中将为大家介绍DevExpress WinForms v19.1中新增的一些控 ...

  10. cookie、session和中间件

    目录 cookie和session cookie与session原理 cookie Google浏览器查看cookie Django操作cookie 获取cookie 设置cookie 删除cooki ...