【AICon】 如何构建高效的 RAG 系统?RAG 技术在实际应用中遇到的挑战及应对策略?>>> 了解详情
写点什么

针对 C++ 和 Delphi 的 LiveBindings 一瞥

  • 2013-01-23
  • 本文字数:1140 字

    阅读完需:约 4 分钟

绑定表达式(Binding expression)并不是新概念,XAML 和 Flex 开发者主要就依靠这个。但除 C++/CX(只用于 WinRT 编程)之外,原生编程语言中通常见不到这种概念。不过为 VCL 和 FireMonkey 设计的 LiveBindings 却是个例外。

我们先来介绍一些背景知识。 VCL(Visual Component Library)是 Delphi 和 C++ Builder 都支持的老式 UI 框架。它支持 x86 和 x64 模式,但只能运行在 Windows 操作系统上。 FireMonkey 在新的应用程序中代替了 VCL。它既支持 Windows,也支持 OS X。FileMonkey 和 VCL 可用于同一应用程序中,不过不能用于同一模块中。

据 Embarcadero 介绍:

LiveBindings 基于称作绑定表达式的关系表达式,既可以是单向的,也可以是双向的。LiveBindings 还包括控制对象和源对象。借助绑定表达式,任何对象都可以绑定到其他任何对象,只需要定义包含所要绑定对象的一个或多个属性的绑定表达式。例如,可以把一个 Tedit 控件绑定到一个 Tlabel,这样当编辑框中的文本改变时,标签的标题也会根据绑定表达式计算而得的值自动调整。再举一个例子,把轨迹条控件绑定到进度条,拖动轨迹条时进度条也可以相应变化。

和很多 Delphi/C++ Builder 工具类似,LiveBindings 通常使用 GUI 工具创建。这里有两种选择: LiveBindings Designer LiveBindings Wizard 。这无疑会让习惯于手工编辑 XAML 或 Flex 的绑定表达式的开发者不爽。

请注意,以编程方式编辑绑定是可能的,但强烈建议不要这么做。这方面的文档深埋在一个关于控制台应用的教程中。

与.NET 中要求对象实现某些复杂的设计模式不同,Delphi 和C++ Builder 中的对象默认就是可绑定的。几乎和所有对象一样,只需要继承 TObject ,然后像正常情况一样暴露出属性。对C++ Builder 而言,这意味着要使用 __property 扩展关键字。

实际应用绑定表达式的代码非常繁琐,不过确实能支持复杂表达式。在下面的例子中,我们可以看到表达式“o1.IntegerValue + o2.IntegerValue”被绑定到了 MyResultObject.IntegerValue 属性。

在 XAML 技术中,绑定表达式是基于事件的。为避免内存泄漏,它们在内部使用了一个“弱事件(weak events)”结构来监控需要通过绑定表达式转发(relay) 的 PropertyChanged 事件。该结构要求所有绑定集中注册,不过事实上大多数开发者并没有意识到这一点。

LiveBindings 缺乏属性变更事件这一概念,因此要进行类似的抽象就不可能了。 虽然 Bindings 仍然是集中注册的,但属性变更时需要显式通知绑定引擎。这通过 Tbindings.Notify 函数完成,该函数接受对象和属性名。

理论上,TBindings.Notify 函数可由属性 setter 调用,而无需客户端代码显式调用。虽然文档没有介绍,但这又带来了多线程相关问题,不过确实消除了对弱事件的需求。

参考英文原文 A Look at LiveBindings for C++ and Delphi

2013-01-23 03:343491
用户头像
臧秀涛 略懂技术的运营同学。

发布了 300 篇内容, 共 129.2 次阅读, 收获喜欢 34 次。

关注

评论

发布
暂无评论
发现更多内容

Activity的6大难点你会几个,面试复盘

android 程序员 移动开发

AndroidHook机制连简单实战都不会凭什么拿高薪,Android开发两年

android 程序员 移动开发

分布式事务最经典的七种解决方案

Java 程序员 架构 面试 分布式

Android开发社招面试解答之性能优化,Android开发面试题及答案

android 程序员 移动开发

android热更新图片,动脑学院vip最新云盘

android 程序员 移动开发

2021最新网易Android面试题目,2021Android架构面试指南

android 程序员 移动开发

2021金九银十,动脑学院官网

android 程序员 移动开发

42岁程序员面试,动脑学院vip课程百度云

android 程序员 移动开发

997页手淘Android面试真题解析火爆全网,Android基础72问

android 程序员 移动开发

打破 Serverless 落地边界,阿里云 SAE 发布5大新特性

互联网 科技

Android事件分发机制及设计思路,Android程序员校招蚂蚁金服

android 程序员 移动开发

Android开发入门教程!扔物线学堂

android 程序员 移动开发

Android开发还会吃香吗,Android开发经典实战

android 程序员 移动开发

跨越行业绊脚石,阿里云函数计算发布7大技术突破

打破 Serverless 落地边界,阿里云 SAE 发布5大新特性

阿里巴巴中间件

云计算 阿里云 Serverless 微服务 云栖大会

Android中高级面试必知必会,Android学习路线

android 程序员 移动开发

Android体系化进阶学习图谱,动脑学院课程值得买吗

android 程序员 移动开发

Android大厂面试真题解析大全,腾讯T3大牛手把手教你

android 程序员 移动开发

跨越行业绊脚石,阿里云函数计算发布7大技术突破

阿里巴巴中间件

阿里云 云原生 中间件 函数计算 云栖大会

android插件化资源冲突,动脑学院课程值得买吗

android 程序员 移动开发

android热更新,扔物线课程怎么样

android 程序员 移动开发

Python代码阅读(第42篇):将输入转换成列表形式

Felix

Python 编程 Code Programing 阅读代码

阿里云混合云Apsara Stack 2.0发布,加速政企数智创新

Lily

Android免打包多渠道统计如何实现,技术实现

android 程序员 移动开发

Android外包是如何转正网易的,大厂Android核心面试题出炉

android 程序员 移动开发

Android开发岗还不会这些问题,15个经典面试问题

android 程序员 移动开发

Android开发自学技巧!rxjava扔物线

android 程序员 移动开发

Android开发面试题目,享学课堂android怎么样

android 程序员 移动开发

每秒创建百万文件,百度沧海·文件存储CFS推出新一代Namespace架构

百度开发者中心

架构 文件存储 cfs

Android事件分发机制收藏这一篇就够了,阿里一线架构师技术图谱

android 程序员 移动开发

Android小程序开发实例,扔物线五期

android 程序员 移动开发

针对C++和Delphi的LiveBindings一瞥_C++_Jonathan Allen_InfoQ精选文章