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

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

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


unit Unit1;interfaceusesSystem.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;typeTForm1 = class(TForm)TrackBar1: TTrackBar;Edit1: TEdit;Label1: TLabel;BindingsList1: TBindingsList;procedure FormCreate(Sender: TObject);procedure TrackBar1Change(Sender: TObject);end;varForm1: TForm1;implementation{$R *.fmx}procedure TForm1.FormCreate(Sender: TObject);
begin{给 BindingsList1 添加表达式, 并设置参数}with TBindExpression.Create(BindingsList1) dobeginControlComponent := Edit1;    //目标控件ControlExpression := 'Text';  //目标控件属性SourceComponent := TrackBar1; //源控件SourceExpression := 'Value';  //源控件属性Active := True;               //激活; 可以通过 Active := False 断开绑定end;with TBindExpression.Create(BindingsList1) dobeginControlComponent := Label1;ControlExpression := 'Text';SourceComponent := TrackBar1;SourceExpression := 'Value';Active := True;end;
end;{在 TrackBar1 的 OnChange 中发送通知}
procedure TForm1.TrackBar1Change(Sender: TObject);
beginBindingsList1.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;interfaceusesSystem.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.Edit;typeTForm1 = class(TForm)TrackBar1: TTrackBar;Edit1: TEdit;Label1: TLabel;procedure FormCreate(Sender: TObject);procedure TrackBar1Change(Sender: TObject);end;varForm1: TForm1;implementation{$R *.fmx}uses System.Bindings.Expression, System.Bindings.Helper;procedure TForm1.FormCreate(Sender: TObject);
beginTBindings.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);
beginTBindings.Notify(Sender, '');
end;end.

Delphi XE2 之 FireMonkey 入门(23) - 数据绑定: TBindingsList: TBindExpression相关推荐

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

    为什么80%的码农都做不了架构师?>>>    表达式中的函数有限, 譬如我想通过绑定输出文本的长度(譬如在 Label1 中绑定输出 Edit1.Text 的长度)就没有相应的函数 ...

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

    如果要给一对 "源控件" 和 "目标控件" 写多个表达式, 使用 TBindExpression 就不如 TBindExprItems 了. TBindExpr ...

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

    为什么80%的码农都做不了架构师?>>>    一.全设计时操作: 先在窗体上放置控件: DataSource1 : TDataSource; ClientDataSet1 : TC ...

  4. Delphi XE2 之 FireMonkey 入门(35) - 控件基础: TFmxObject: 其它

    Delphi XE2 之 FireMonkey 入门(35) - 控件基础: TFmxObject: 其它 TFmxObject 增加了 TagObject.TagFloat.TagString, 算 ...

  5. Delphi XE2 之 FireMonkey 入门(1)

    Delphi XE2 的 FireMonkey 是跨平台的, 暂时只准备看看它在 Windows 下(我是 32 位 Win7)的应用情况. 很新的东西, 相信有了它, 以后的界面将会更灵活.漂亮, ...

  6. Delphi XE2 之 FireMonkey 入门(17) - 特效

    刚打开 XE2 时, 就从 Tool Palette 窗口的 Effects 组中发现洋洋洒洒的六十多个特效... 每个特效分别对应一个类, 分别来自 FMX.Effects 和 FMX.Filter ...

  7. Delphi XE2 之 FireMonkey 入门(13) - 动画(下)

    TAnimation 类的主要成员: protectedfunction NormalizedTime: Single; //procedure ProcessAnimation; virtual; ...

  8. Delphi XE2 之 FireMonkey 入门(2)

    FireMonkey 的控件都是自己绘制的(而不是基于系统组件), 我想它们应该是基于一些基本图形; 就从基本图形开始吧. FMX.Objects 单元给出的类: TShape //基本图形的基类 T ...

  9. Delphi XE2 之 FireMonkey 入门(20) - TStyleBook(皮肤、样式相关)

    我觉得叫 "皮肤" 不如叫 "样式" 或 "风格", 因为它可以包含和动作关联的动画. 在 FMX 下, 控件可以任意绘制, 各部件个性化的 ...

最新文章

  1. oracle自增列问题i,关于oracle中自增列问题
  2. Hadoop大数据——mapreduce的Distributed cache
  3. Vue-router VUE路由系统
  4. OPA start up and wait for
  5. 城管威逼交警“让老百姓笑话”
  6. 前端学习(1996)vue之电商管理系统电商系统之美化步骤条
  7. mysql max字符串数值_针对字符串值的mysql:min()和max()。
  8. javascript乘法和加法_前端基础:JavaScript
  9. C# - Environment类,获取桌面的路径
  10. python知识点2--正则表达式【转载】
  11. 解决“此图片来自微信公众平台未经允许不可引用”的方法
  12. 作为前端Web开发者,这12条基本命令不可不会
  13. node获取图片路径_Deno 正式发布,彻底弄明白和 node 的区别
  14. c++折线平移算法_【MITA周刊】第十五周:聚类算法
  15. 【资源下载】PCtoLCD2002 下载 资源分享 OLED取模软件
  16. 爬楼梯 java_爬楼梯问题java实现
  17. java计算机毕业设计学生成绩管理系统源程序+mysql+系统+lw文档+远程调试
  18. 黑寡妇(BWO)优化算法(Matlab代码实现)
  19. [Excel知识技能] 将数值格式数字转换为文本格式
  20. MM定理(Modigliani-Miller)证明与图解

热门文章

  1. Spring(07)——单例注入多例之lookup-method
  2. java日记(2)------定时任务quartz浅析
  3. Win10 新版又悲剧了!老外神评论
  4. The j.u.c Synchronizer Framework翻译(三)使用、性能与总结
  5. 20151130语法基础
  6. 从头开始写框架(一):浅谈JS模块化发展
  7. js中对象的私有属性和公有属性
  8. 要懂得利用和筛选友情链接
  9. 谈 JavaScript 浮点数计算精度问题(如0.1+0.2!==0.3)
  10. 聊聊flink JobManager的heap大小设置