一步一步学习使用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应用程序的更多相关文章

  1. 【WPF学习】第五十七章 使用代码创建故事板

    在“[WPF学习]第五十章 故事板”中讨论了如何使用代码创建简单动画,以及如何使用XAML标记构建更复杂的故事板——具有多个动画以及播放控制功能.但有时采用更复杂的故事板例程,并在代码中实现全部复杂功 ...

  2. Dynamic CRM 2013学习笔记(二十七)无代码 复制/克隆方法

    前面介绍过二种复制/克隆方法:<Dynamic CRM 2013学习笔记(十四)复制/克隆记录> 和<Dynamic CRM 2013学习笔记(二十五)JS调用web service ...

  3. 12.Linux软件安装 (一步一步学习大数据系列之 Linux)

    1.如何上传安装包到服务器 有三种方式: 1.1使用图形化工具,如: filezilla 如何使用FileZilla上传和下载文件 1.2使用 sftp 工具: 在 windows下使用CRT 软件 ...

  4. (转) 一步一步学习ASP.NET 5 (四)- ASP.NET MVC 6四大特性

    转发:微软MVP 卢建晖 的文章,希望对大家有帮助.原文:http://blog.csdn.net/kinfey/article/details/44459625 编者语 : 昨晚写好的文章居然csd ...

  5. (转) 一步一步学习ASP.NET 5 (二)- 通过命令行和sublime创建项目

    转发:微软MVP 卢建晖 的文章,希望对大家有帮助. 注:昨天转发之后很多朋友指出了vNext的命名问题,原文作者已经做出了修改,后面的标题都适用 asp.net 5这个名称. 编者语 : 昨天发了第 ...

  6. 一步一步学习SignalR进行实时通信_1_简单介绍

    一步一步学习SignalR进行实时通信\_1_简单介绍 SignalR 一步一步学习SignalR进行实时通信_1_简单介绍 前言 SignalR介绍 支持的平台 相关说明 OWIN 结束语 参考文献 ...

  7. 一步一步学习SignalR进行实时通信_8_案例2

    原文:一步一步学习SignalR进行实时通信_8_案例2 一步一步学习SignalR进行实时通信\_8_案例2 SignalR 一步一步学习SignalR进行实时通信_8_案例2 前言 配置Hub 建 ...

  8. 一步一步学习SignalR进行实时通信_9_托管在非Web应用程序

    原文:一步一步学习SignalR进行实时通信_9_托管在非Web应用程序 一步一步学习SignalR进行实时通信\_9_托管在非Web应用程序 一步一步学习SignalR进行实时通信_9_托管在非We ...

  9. 一步一步学习SignalR进行实时通信_7_非代理

    原文:一步一步学习SignalR进行实时通信_7_非代理 一步一步学习SignalR进行实时通信\_7_非代理 SignalR 一步一步学习SignalR进行实时通信_7_非代理 前言 代理与非代理 ...

  10. 一步一步学习SignalR进行实时通信_5_Hub

    原文:一步一步学习SignalR进行实时通信_5_Hub 一步一步学习SignalR进行实时通信\_5_Hub SignalR 一步一步学习SignalR进行实时通信_5_Hub 前言 Hub命名规则 ...

随机推荐

  1. C#之Bitmap

    SetPixel和GetPixel private void btnC_Click(object sender, RoutedEventArgs e) { OpenFileDialog dia = n ...

  2. Claude 4炸裂发布!凭什么敢称宇宙最强编程 AI?

    5 月 23 日,Claude 官方宣布推出下一代 Claude 模型:Claude Sonnet 4 和 Claude Opus 4,直接 在全世界的 AI 圈掀起了新的风暴! 据官方称,Claud ...

  3. qt动画类学习

    Qt动画类 QPropertyAnimation 显示动画 QPropertyAnimation *animation = new QPropertyAnimation(window(), " ...

  4. 基于.net6的一款开源的低代码、权限、工作流、动态接口平台

    一款开源的低代码.权限.工作流.动态接口平台. 主要功能模块:工作流.权限管理.低代码.动态表单.动态接口.动态数据源 功能展示 因为个人时间非常有限,框架目前很多细节可能没完善.且前端有些代码写的不 ...

  5. HyperWorks汽车B-柱网格变形

    在这一节,将练习如何使用变形域,实现汽车 B-柱有限元模型的网格变形. 图 7-13 网格变形前后的 B 柱模型 Step01:读取并查看模型. 打开模型文件 Exercise_7c.hm. Step ...

  6. UFT 对时间的处理

    1. 当前时间的后n天 2. 当前时间的前n天  3. 当前时间 eg:

  7. MongoDB入门实战教程(11)

    前面我们学习了在MongoDB中的写操作事务管理,本篇我们开始进入读操作事务. 1 读数据关注的两个问题 在通过mongodb读取数据时,我们一般需要关注两个问题: (1)从哪里读取? (2)什么样的 ...

  8. C# .NET ThreadPool 实现概述及

    微信公众平台 (qq.com) 在.NET中,ThreadPool(线程池)是一个用于管理和优化线程使用的强大工具.线程池允许开发者在需要时创建线程,执行任务,并在任务完成后回收线程,从而避免了线程的 ...

  9. C# DataGridViewRow转换为(Model)实体对象

    https://blog.csdn.net/cxu123321/article/details/107875832 ContactModel model = dataGridView1.Current ...

  10. Spark知识点汇总

    一.Spark架构设计 二.Spark常用算子 tips1: 数据处理的生命周期tips2: repartition vs coalesce区别: 可以使用 repartition 算子随意调整(提升 ...