【Delphi】中的数据绑定(LiveBindings)

news2024/11/14 15:36:29

LiveBindings 是 RAD Studio 中 VCL 和 FireMonkey 框架都支持的数据绑定功能。

LiveBindings 是一个基于表达式的框架,这意味着它使用绑定表达式将对象绑定到其他对象或数据集字段。

LiveBindings 概述

LiveBindings 基于关系表达式,即绑定表达式,可以是单向的,也可以是双向的。LiveBindings 还涉及控制对象和源对象。通过绑定表达式,任何对象都可以绑定到任何其他对象,只需定义一个绑定表达式,其中涉及要绑定到一起的对象的一个或多个属性即可。例如,可以将 TEdit 控件绑定到 TLabel 上,这样当编辑框中的文本发生变化时,标签的标题就会自动调整为绑定表达式所绑定的TEdit的值。另一个例子是将轨迹条控件与进度条绑定,这样当您移动轨迹条时,进度条就会上升或下降。

以同样的方式,您可以连接到数据集字段,更改不同对象的一个或多个属性,等等。由于 LiveBindings 会传播,因此你甚至可以更改与绑定到控制对象的其他对象相连的对象的属性。

创建 LiveBindings

创建绑定的主要方法是使用 LiveBindings Designer。设计器只能创建 QuickBindings 组件。该图显示其他组件(如 TBindLink)的绑定,但不能像 QuickBinding 组件那样移动端点。

创建此类绑定的第二种方法是使用 LiveBindings Wizard。它也只能创建 QuickBinding 组件。

LiveBindings 设计器使用 QuickBindings 创建此类绑定(这也反映在向导中):

  • 将 TEdit 等控件链接到数据源中的字段
  • 将 TGrid 等控件链接到数据源
  • 将 TEdit 等控件链接至组件属性(如 TLabel.Text)
  • 将组件属性链接到数据源中的字段

一个控件只能链接到一个端点。因此,如果一个 TEdit 已链接到一个字段,而你试图将 TEdit 链接到一个组件属性,那么该字段的链接将被删除。此外,一个组件属性只能链接到一个端点。数据源和数据源成员可以链接到多个端点。例如,一个字段可以链接到 TEdit,也可以链接到 TLabel。这将涉及两个绑定组件。

尽管 LiveBindings Designer 不允许一个控件链接到其他两个组件属性,但可以通过将控件和组件属性链接到一个字段来实现这种效果。为此,您可以使用 TPrototypeBindSource 组件来创建一个字段。

LiveBindings 和 API 文档中使用的 “链接”(Link)一词表示,绑定会识别用户所做的更改,并自动更新控件和数据源,以响应用户的输入。

使用 LiveBindings

在 VCL 表单应用程序和 FireMonkey 应用程序中,您可以使用 LiveBindings 设计器或 LiveBindings 向导来使用 LiveBindings。请注意,您可以通过 “Object Inspector”或右键单击窗体上的单个组件来调用向导(但前提是之前已在 Tools > Options > LiveBindings 对话框中启用了向导)。

有关如何在 RAD Studio 中创建 LiveBindings 的快速概述,请参阅Creating LiveBindings, New LiveBinding 或 LiveBindings Wizard主题。请参阅教程: 以编程方式使用 LiveBinding,了解以编程方式创建 LiveBindings 的说明(如果出于某种原因需要这样做)。

使用 LiveBindings Designer在 VCL 或 FireMonkey 应用程序中使用 LiveBindings 的教程

  • Tutorial: Linking Controls via LiveBindings Designer
  • Tutorial: Using TPrototypeBindSource and the LiveBindings Designer

使用  LiveBindings Wizard 无缝创建 LiveBindings 的快速方法(QuickBindings)

  • Linking a Control with a Field
  • Linking a Control with a Component Property
  • Linking a Property of a Component with a Control
  • Linking a Property of a Component with a Field
  • Creating a Data Source (LiveBindings Wizard)

如何使用 LiveBindings Wizard 使用 LiveBindings VCL 或 FireMonkey 应用程序的教程

  • Tutorial: Using LiveBindings in FireMonkey Applications (示例了FireMonky空白应用程序的属性绑定)
  • Tutorial: Using LiveBinding Programatically (仅适合 Console Applications 或手动编辑表达式)
  • Tutorial: Using LiveBindings to Create an Application Without Code (使用 LiveBindings 构建的空白应用程序示例)
  • Tutorial: Using LiveBinding in VCL Applications (示例 VCL 应用程序属性绑定)

关于如何使用 LiveBindings 特定功能的主题

  • Using Custom Format and Parse Expressions
使用评估快捷键

在填充包含列表或表格数据的控件(如列表视图、网格或组合框)时,某些绑定组件支持的评估快捷方式可以提高性能。

注意:评估快捷方式无法提高填充 FireMonkey 网格的绑定组件的性能。

支持评估快捷方式的绑定组件通常默认使用评估快捷方式,因为评估快捷方式可以更快地评估不使用自定义格式或解析表达式的绑定表达式。

不过,使用评估快捷方式需要绑定组件首先检查绑定表达式,以确定它们是否使用了自定义格式或解析表达式。如果所有或大部分绑定表达式都使用了自定义格式或解析表达式,那么执行检查所需的处理量可能比使用求值快捷方式节省的处理量(如果有的话)还要高。支持求值的绑定组件通常会提供一个布尔属性 UseEvalShortcuts,你可以将其设置为 False 以禁用求值快捷方式。

LiveBindings 可视化组件

LiveBindings 引擎是一个运行时功能,但在Tool Palette中有许多可视化组件,可帮助( create live bindings between components)您在设计时创建组件之间的实时绑定。有时,你也可以使用 LiveBindings 向导(LiveBindings Wizard)或 LiveBindings 设计器(LiveBindings Designer),以可视化方式创建绑定。

如果浏览工具选项板中的 LiveBindings 或 LiveBindings Misc 选项卡,可以将以下组件拖放到窗体(VCL 或 FireMonkey)中。

  • LiveBindings
控件 Logo控件名称说明
TBindSourceDB用于创建数据库绑定。
TPrototypeBindSource提供了一个用于生成样本数据的数据源,在没有数据的情况下,您可以使用该数据源开始工作。稍后,您可以用一些真实数据替换该数据源。
TBindSourceDBX用于创建与数据库的绑定,使用 DBX framework.
TParamsAdapter用于将可视化控件与 DBX 命令参数绑定。
TBindNavigator (FMX or VCL)用于在开发 FMX 或 VCL 应用程序时循环浏览数据集中的记录。
  • LiveBindings 其他
控件Logo控件名称说明
TBindingsList用于保持 binding lists.
TDataGeneratorAdapter是数据生成器的适配器。
TAdapterBindSource用于处理非数据库数据。适配器属性用于将数据源连接到非数据库数据,如对象的通用集合。

提示:

当您使用 LiveBindings 设计器在组件间创建实时绑定时,相应的 LiveBindings 组件(TBindingsList)会自动放置在表单上。该组件包含应用程序中所有可用绑定的列表。有关绑定列表的更多信息,请参阅绑定列表主题。

LiveBindings 示例

RAD Studio 随附了大量 LiveBindings 示例应用程序,点击开始 | 程序 | Embarcadero RAD Studio Athens | 示例即可找到。主要文件夹是 Object Pascal\LiveBinding 。在 Object Pascal\FireMonkey Desktop\ListCollections 文件夹中还有一个 LiveBinding 示例,在 FMX.ListCollections Sample 中对其进行了描述。下表列出了这些示例,并按其相应类别(FMX 或 VCL)进行了划分。其中一些示例应用程序同时适用于 FMX 和 VCL,而另一些则仅适用于这两个类别中的一个。

FMX LiveBindings SamplesVCL LiveBindings Samples
BindGridLinkFMXProjectBindGridLinkVCLProject
BindLinkFMXProjectBindLinkVCLProject
N/AOneOfEachBindCompVCL
ListCollectionsSampleProjectN/A

这些示例向你详细展示了如何使用 LiveBindings 构建增强型应用程序。

LiveBindings API 参考

以下单元是 LiveBindings 引擎的一部分。其相应帮助主题中的文档包含有关 LiveBindings API 使用的信息。

Unit NameContains
System.Bindings.CustomScopeCustom scope-related classes
System.Bindings.CustomWrapperCustom wrapper-related classes
System.Bindings.EvalProtocolInterfaces used by the engine for the wrappers, scopes, and other internal structures
System.Bindings.ExpressionBinding expression-related classes
System.Bindings.ExpressionDefaultsDefault behavior for binding expressions
System.Bindings.FactoriesFactories for expressions, managers, and scopes
System.Bindings.HelperTools for programmatic creation of binding expressions and for notifications
System.Bindings.ManagerBinding manager-related implementations
System.Bindings.ManagerDefaultsDefault behavior for binding managers
System.Bindings.MethodsControl of methods that can be used in the script
System.Bindings.OutputsTools for control of expression outputs
Data.BindContains units with implementations for the LiveBindings components

通过 LiveBindings 同步数据

使用 RAD Studio 中的 LiveBindings,你可以同步各种数据,例如列表框控件和字符串网格,前提是两者包含相同的数据。请参阅 “通过 LiveBindings 同步数据 ”主题,了解如何通过 LiveBindings Designer 中某些组件的 Synch 和 * 属性同步数据。

创建支持 LiveBindings 的组件

要使类似 TTrackBar 这样的简单控件能够使用 LiveBindings,有两个要求。第一个要求是控件必须实现对观察者的支持。LiveBindings 依赖于观察者来订阅控件通知。第二个要求是注册控件值名称(例如:TTrackBar 组件的位置)。LiveBindings 组件使用控件值名称生成表达式,以获取和设置控件值。

有关如何创建启用 LiveBindings 的组件的更多信息,请阅读创建启用 LiveBindings 的组件教程。

Creating LiveBindings-Enabled Components 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2152434.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

react 甘特图之旅

react-gantt GitHub 仓库: https://github.com/clayrisser/react-gantt react-gantt-chart GitHub 仓库: https://github.com/MaTeMaTuK/gantt-task-react easy-gant-beta GitHub 仓库: https://github.com/web-widgets/react-gantt-demos 上面的版本不兼容 dhtmlx-gant…

一周热门|比GPT-4强100倍,OpenAI有望年底发布GPT-Next;1个GPU,1分钟,16K图像

大模型周报将从【企业动态】【技术前瞻】【政策法规】【专家观点】四部分,带你快速跟进大模型行业热门动态。 01 企业动态 Ilya 新公司 SSI 官宣融资 10 亿美元 据路透社报道,由 OpenAI 联合创始人、前首席科学家 Ilya Sutskever 在 2 个多月前共同创…

抖音如何改ip地址到另外城市

在数字化时代,抖音作为广受欢迎的社交媒体平台,不仅连接了亿万用户,也成为了展示个人生活、分享创意内容的重要舞台。然而,有时候出于隐私保护等需求,用户可能希望更改抖音账号显示的IP地址,使其看起来像是…

奇安信渗透2面经验分享

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…

泛微E9开发 创建自定义浏览框,关联物品管理表【1】

创建自定义浏览框,关联物品管理表【1】 1、自定义浏览框1.1 概念1.2 前端样式 2、创建物品管理表2.1 新建建模表单操作方法2.2 物品管理表 3、创建浏览按钮 1、自定义浏览框 1.1 概念 自定义浏览框可以理解为是建模引擎中的表与表关联的一个桥梁。比如利用建模引擎…

【学习笔记】数据结构(六 ①)

树和二叉树 (一) 文章目录 树和二叉树 (一)6.1 树(Tree)的定义和基本术语6.2 二叉树6.2.1 二叉树的定义1、斜树2、满二叉树3、完全二叉树4、二叉排序树5、平衡二叉树(AVL树)6、红黑树 6.2.2 二叉树的性质6.…

2024“智衡屋” 智能感知挑战赛决赛即将来袭

2024“智衡屋” 智能感知挑战赛决赛将于 2024 年 9 月 24 日在安徽省合肥市举行,决赛将作为 2024 年中国计量测试学会首届人工智能计量学术大会的重要环节率先举行。 2024“智衡屋” 智能感知挑战赛自启动以来,吸引了700余支高校学生、科研机构研究人员以…

Spring Boot框架在心理教育辅导系统中的应用

3 系统分析 3.1可行性分析 在进行可行性分析时,我们通常根据软件工程里方法,通过四个方面来进行分析,分别是技术、经济、操作和法律可行性。因此,在基于对目标系统的基本调查和研究后,对提出的基本方案进行可行性分析。…

weblogic CVE-2018-2894 靶场攻略

漏洞描述 Weblogic Web Service Test Page中⼀处任意⽂件上传漏洞,Web Service Test Page 在 "⽣产模式"下默认不开启,所以该漏洞有⼀定限制。 漏洞版本 weblogic 10.3.6.0 weblogic 12.1.3.0 weblogic 12.2.1.2 28 weblogic 12.2.1.3 …

ChromaDB教程_2024最新版(下)

前言 Embeddings(嵌入)是表示任何类型数据的AI原生方式,它非常适用于各种AI驱动的工具和算法中。它们可以表示文本、图像,很快还可以表示音频和视频。有许多创建嵌入的选项,无论是在本地使用已安装的库,还是…

LabVIEW 可以同时支持脚本编程和图形编程

LabVIEW 可以同时支持脚本编程和图形编程,但主要依赖其独特的 图形编程 环境(G语言),其中程序通过连线与节点来表示数据流和功能模块。不过,LabVIEW 也支持通过以下方式实现脚本编程的能力: 1. 调用外部脚本…

openCV3.0 C++ 学习笔记补充(自用 代码+注释)---持续更新 三(61-)

环境&#xff1a;OpenCV3.2.0 VS2017 61、轮廓集合重排序(按轮廓面积从小到大) //对轮廓集合面积从大到小排序 bool compareValue_bs(const std::vector<cv::Point> & c1, const std::vector<cv::Point> & c2) {int area1 cv::contourArea(c1);int area…

Vue 组件通信指南:Props 和 $emit,Vuex(状态管理),EventBus(事件总线),Provide/Inject(依赖注入)

引言 在 Vue 中&#xff0c;组件是构建应用的基本单元&#xff0c;而组件通信则是构建复杂应用的关键。组件通信是指在不同的 Vue 组件之间传递数据、交互和共享状态的过程&#xff0c;它在构建大型应用和组织代码方面起着至关重要的作用。 在开发过程中&#xff0c;我们经常…

一招教你挑代理IP的秘诀

逛乎&#xff0c;一直刷到这类问题&#xff1a; 本质上&#xff0c;都是在面对市面上那么多代理IP服务提供商&#xff0c;挑得眼花缭乱了&#xff0c;而代理IP直接影响到我们数据采集任务的效率、安全性和成功率&#xff0c;所以我们在挑选服务提供商的时候都会谨慎一些。索性我…

VScode安装和使用教程,2024最新最全,零基础入门到精通,看完这一篇就够了!

# VSCode 安装使用教程&#xff08;图文版&#xff09; 工欲善其事&#xff0c;必先利其器 对于我们每一位软件工程师来说&#xff0c;都要有自己顺手的 IDE 开发工具&#xff0c;它就是我们的武器。 一个好用的 IDE 不仅能提升我们的开发效率&#xff0c;还能让我们保持愉悦…

推送 Git Remote: 内部服务错误解决方案

Git Remote: 内部服务错误起因 拉取阿里云云效仓库代码的时候&#xff0c;之前一直拉取仓库并且推送都没有任何问题&#xff0c;但是最近在云效里面新建了一个仓库&#xff0c;也能成功拉取下来&#xff0c;但就是推送不上去&#xff0c;但是其它仓库都可以随意推送没有任何问…

IPv6(三)

文章目录 IPv6报文 IPv6报文 IPv6基本报头有8个字段&#xff0c;固定大小为40字节&#xff0c;&#xff0c;每个IPv6数据都必须包含报头&#xff0c;基本报头提供报文转发的基本信息&#xff0c;会被转发路径上面的所有路由器解析 IPv6报头长度为40字节Version&#xff1a;版本…

如何实现一个流畅的滚动列表

如何实现一个流畅的滚动列表 在网页开发中&#xff0c;滚动列表是展示大量数据时常用的交互方式。通过结合CSS动画和视觉设计&#xff0c;我们可以让列表内容自动滚动&#xff0c;为用户提供顺畅的浏览体验。今天&#xff0c;我将带你一步步实现一个流畅、富有视觉吸引力的滚动…

MySQL中的LIMIT与ORDER BY关键字详解

前言 众所周知&#xff0c;LIMIT和ORDER BY在数据库中&#xff0c;是两个非常关键并且经常一起使用的SQL语句部分&#xff0c;它们在数据处理和分页展示方面发挥着重要作用。 今天就结合工作中遇到的实际问题&#xff0c;回顾一下这块的知识点。同时希望这篇文章可以帮助到正…

[备忘]测算.net中对象所占用的内存

.net 基础库中应该是没有直接提供计算某个对象所占内存的方法。简单查了下&#xff0c;找到几种方式&#xff1a; 1、运行态用工具进行内存分析 比如&#xff0c;微软这篇教程中有介绍。《使用 .NET 对象分配工具分析内存使用情况》https://learn.microsoft.com/zh-cn/visuals…