一步一步学习使用LiveBindings(1) 使用向导无代码创建基于绑定的FireMonkey应用程序
一步一步学习使用LiveBindings(1) 使用向导无代码创建基于绑定的FireMonkey应用程序
这将是一个系列的文章,主要通过实际操作的模式一步一步来揭开LiveBindings的面纱。
在VCL框架中,传统的数据绑定模式是这样的:用 TDataSource 组件连接数据集和数据显示控件。数据显示控件(一般以TDB开头的控件)能自动同步数据变化,能处理用户操作,使得数据修改和更新更简单而且直观。
在FireMonkey中,传统的数据绑定控件与非数据绑定控件已经不再明显区分,FMX提供了一种称为LiveBindings的技术,简而言之是什么都可以用来绑定。
通过一个例子初步领略一下:
1. 单击主菜单中的 File > New > Multi-Device Application - Delphi > Blank Application ,创建一个新的多设备应用程序。
建议立即单击工具栏上的Save All按钮,将单元文件保存为uMainForm.pas,将项目保存为LiveBinding_Wizard.dproj。
你的项目结构应该像这样:

2. 在工具面板[Palette]中,通过搜索找到TFDMemTable组件,双击工具TFDMemTable图标添加到主窗体。

右击单击窗体上的FDMemTable1组件,从弹出的菜单中选择“Load From File...”菜单项,选择Delphi自带的一个名为biolife.FDS的示例数据文件,在笔者的电脑位于如下的位置:
C:\Users\Public\Documents\Embarcadero\Studio\23.0\Samples\Data
建议将biolife.FDS复制到另外一个位置,比如c:\temp\biolife.FDS,然后将此文件加载到TFDMemTable中,避免误改原来的初始数据。
接下来在属性面板,将“Active”属性设置为True。
3. 再次在FDMemTable1组件上单击鼠标,选择“Fields Editor...”菜单项,在弹出的“Fields Editor”中,右击鼠标,选择“Add All Fields”,这样成功的加载了内存表中所有的字段。

4. 接下来在窗体上放置一个TLabel控件,一个TEdit、TMemo、TImageControl控件以及一个TBindNavigator控件,按如下图的方式简单的排列。

5.在窗体的空白位置右击鼠标,选择“Bind Visually”菜单项,Delphi将打开LiveBindings Designer,将这个面板拉大一些,然后单击最左侧工具栏面板最下面的一个图标,打开 LiveBindings Wizard向导。

6.在向导的第1个窗体上,选择“Link a component property with a field.”项,单击“下一步”按钮。

注意:当选择不同的Link项时,左侧的导般面板会发生一些向导步骤的变化。
7. 在接下来的向导窗口,指定Component为Label1,Property为Text,单击“下一步”按钮。

8. 在Data Source页面,选择第3步添加的FDMemTable1组件。

9. 在Field Name页面,选择“Species Name”字段名,单击“下一步”按钮。

10. 在下一个页面保持默认,单击“完成”按钮,则TLable控件的绑定完成。
这时候,会发现Delphi自动向窗体添加了一个名为BindingsList1的TBindingsList控件和一个名为BindSourceDB1的TBindSourceDB控件。

并且在LiveBindings Designer中,FDMemTable1现在被BindSourceDB1包围,有一个指向Label1的单向链接。

在窗体上单击BindSourceDB1控件,在属性编辑器中可以看到它类似于传统的TDataSource控件,有一个DataSet属性已经指向了FDMemTable1控件。

11. 按照步骤6-10所示的向导步骤,完成如下的绑定:
- 绑定Edit1组件的Text属性到FDMemTable1的Category字段。
- 绑定Memo1组件的Text属性到FDMemTable1的Notes字段。
- 绑定ImageContrl1组件的Bitmap属性到FDMemTable1的Graphic字段。
- 将BindNavigator1组件的DataSource属性指向BindSource1组件。
注意:在操作向导的过程中,可以发现已经进行过绑定的字段,会显示一个链条形的图标。
![]()
12. 万事皆备,只欠一Run了,按下F9,或者是主菜单的“Run > Run”,可以看到带绑定功能的窗口已经成功出现。
假如您的窗体没有数据,请重新为FDMemTable1控件从文件中加载一次数据,应该就能看到绑定的效果
在这个窗口中,您可以通过BindNavigator进行上一条,下一条导航,由于所有的绑定是单向的,因此暂时无法更新数据回到数据源,在后续的篇幅中会介绍如何实现双向数据绑定。

回到LiveBindings Designer,可以看到Delphi自动为我们添加了各种链接线,单击每一条链接线,在属性编辑器上可以看到这些链接的详细信息。而且在结构面板,也可以看到每个有进行过绑定的控件下面,显示了LiveBindings结点。

LiveBindings的核心在TBindingList组件中,双击BindingList1组件,Delphi会弹出编辑绑定的窗口,单击工具栏上的第一个按钮,可以直接新建绑定,或者重新打开"LiveBindings Wizard..."窗口。

在接下来的文章中,我将详细介绍一些LiveBinding的概念性的东西,有兴趣的朋友可以关注。
一步一步学习使用LiveBindings(1) 使用向导无代码创建基于绑定的FireMonkey应用程序的更多相关文章
- 【WPF学习】第五十七章 使用代码创建故事板
在“[WPF学习]第五十章 故事板”中讨论了如何使用代码创建简单动画,以及如何使用XAML标记构建更复杂的故事板——具有多个动画以及播放控制功能.但有时采用更复杂的故事板例程,并在代码中实现全部复杂功 ...
- Dynamic CRM 2013学习笔记(二十七)无代码 复制/克隆方法
前面介绍过二种复制/克隆方法:<Dynamic CRM 2013学习笔记(十四)复制/克隆记录> 和<Dynamic CRM 2013学习笔记(二十五)JS调用web service ...
- 12.Linux软件安装 (一步一步学习大数据系列之 Linux)
1.如何上传安装包到服务器 有三种方式: 1.1使用图形化工具,如: filezilla 如何使用FileZilla上传和下载文件 1.2使用 sftp 工具: 在 windows下使用CRT 软件 ...
- (转) 一步一步学习ASP.NET 5 (四)- ASP.NET MVC 6四大特性
转发:微软MVP 卢建晖 的文章,希望对大家有帮助.原文:http://blog.csdn.net/kinfey/article/details/44459625 编者语 : 昨晚写好的文章居然csd ...
- (转) 一步一步学习ASP.NET 5 (二)- 通过命令行和sublime创建项目
转发:微软MVP 卢建晖 的文章,希望对大家有帮助. 注:昨天转发之后很多朋友指出了vNext的命名问题,原文作者已经做出了修改,后面的标题都适用 asp.net 5这个名称. 编者语 : 昨天发了第 ...
- 一步一步学习SignalR进行实时通信_1_简单介绍
一步一步学习SignalR进行实时通信\_1_简单介绍 SignalR 一步一步学习SignalR进行实时通信_1_简单介绍 前言 SignalR介绍 支持的平台 相关说明 OWIN 结束语 参考文献 ...
- 一步一步学习SignalR进行实时通信_8_案例2
原文:一步一步学习SignalR进行实时通信_8_案例2 一步一步学习SignalR进行实时通信\_8_案例2 SignalR 一步一步学习SignalR进行实时通信_8_案例2 前言 配置Hub 建 ...
- 一步一步学习SignalR进行实时通信_9_托管在非Web应用程序
原文:一步一步学习SignalR进行实时通信_9_托管在非Web应用程序 一步一步学习SignalR进行实时通信\_9_托管在非Web应用程序 一步一步学习SignalR进行实时通信_9_托管在非We ...
- 一步一步学习SignalR进行实时通信_7_非代理
原文:一步一步学习SignalR进行实时通信_7_非代理 一步一步学习SignalR进行实时通信\_7_非代理 SignalR 一步一步学习SignalR进行实时通信_7_非代理 前言 代理与非代理 ...
- 一步一步学习SignalR进行实时通信_5_Hub
原文:一步一步学习SignalR进行实时通信_5_Hub 一步一步学习SignalR进行实时通信\_5_Hub SignalR 一步一步学习SignalR进行实时通信_5_Hub 前言 Hub命名规则 ...
随机推荐
- 再论“ArcGIS AddIN之工具不可用”
工作需要,开发arcgis的addin插件.从网上找了工程范例,编译dll,没有生成esriAddIn文件. 第二次,重新创建addin类型的动态库工程,从范例中复制类文件到工程中,编译dll,正常生 ...
- css实现居中对齐的几种方式
一般来说居中的话可分为水平居中与垂直居中,以下是我个人总结的几种方式 1.水平居中: inline元素:text-algin:center实现 block元素:margin:auto absolute ...
- 转|java反射方法和使用
概述 java中不通过new关键字获取对象并且使用类对象中的成员变量和方法,第一时间我们会想到可以使用反射去实现这些功能.反射很强大,而且是Spring的常用轮子,故我们学会了它就可以搭配很多东西 ...
- jupyter的使用 -- 快捷键
jupyter的使用 1.快捷键的使用 插入cell:a,b 删除cell:x 执行cell:shift+enter 切换cell的模式:m,y cell执行后,在cell的左侧双击就可以回到cell ...
- 「Note」数据结构方向 - 可持久化数据结构
1. 可持久化线段树 1.1. 简介 可持久化线段树一般用于解决区间第 \(k\) 小值的询问. 首先考虑简化过的问题,区间 \(\left[1,r\right]\) 的第 \(k\) 小值. 考虑用 ...
- 「Log」2023.8.11 小记
序幕 从今天开始记小记. 七点到校了,先小摆一会,然后整理博客. 听 MiTiS 的电音,开始写题. \(\color{blueviolet}{P1829\ [国家集训队]\ Crash的数字表格\ ...
- Informer架构以及简单使用
Informer架构以及简单使用 介绍 我们知道可以使用 Clientset 来获取所有的原生资源对象,那么如果我们想要去一直获取集群的资源对象数据呢?岂不是需要用一个轮询去不断执行 List() 操 ...
- Gin?有这一篇就够了!
Gin Gin是Golang的一个后端框架,封装比较优雅,API友好. go get -u github.com/gin-gonic/gin 1.hello word package main imp ...
- linux 配置定时任务
注意:定时任务执行默认路径,我们配置的命令如kubectl要配置绝对路径/usr/local/bin/kubectl,或者在脚本中全局定义PATH 配置说明 linux 配置定时任务的方式比较多,可以 ...
- ceph对象存储
一.Ceph对象存储的概念 ceph是一种分布式对象存储系统,通过ceph对象网关提供对象存储接口,也称为RADOS网关(RGW)接口.它构建在Ceph RADOS之上.RGW使用librgw(RAD ...
