在 XE3 中使用自动更新进行实时绑定(无需像在 XE2 中那样调用 Notify())
Posted
技术标签:
【中文标题】在 XE3 中使用自动更新进行实时绑定(无需像在 XE2 中那样调用 Notify())【英文标题】:Live Binding with Automatic updates in XE3 (no need to call Notify() as in XE2) 【发布时间】:2012-09-21 10:16:45 【问题描述】:我目前正在使用 Delphi XE2,并听说过他们在 XE3 中使用自动更新的新 Live Binding(无需像在 XE2 中那样调用 Notify())。
在 C# 或 Delphi XE2 中,我们必须实现 INotifyPropertyChanged
(在 Delphi 中为 Notify();
),这种方法非常有意义,因为我们可以完全控制要更新的内容以及何时更新它,这样我们就可以正常工作了轻松调整性能并实现虚拟化。
但我只想知道它是如何工作的,他们为了实现它做了什么样的机制,我不知道他们是如何做到的,以下是可能用于实现自动更新的假设。
Timer : 一个计时器频繁滴答并刷新所有数据
没有虚拟化的性能非常慢
编译器级特性:所有notify() events
相关代码由编译器自动神奇实现
很多开销
其他方法:
请帮助我确定他们是如何实施的。
我目前正在使用 XE3 试用版,因此无法访问源代码,您的回答将帮助我决定是否切换到新功能。 我有一个类(集合项),需要绑定 400 个属性(并非所有属性),因此性能确实对我的应用程序的稳定性起着重要作用。
【问题讨论】:
观察者设计模式已被集成到 FireMonkey 和 VCL 中。 plus.google.com/101083836958121708461/posts/h6HSZxQdvqY Afaik 自动更新仅与您可以绑定的控件相关,并且当您更改属性时,任何数据对象都不涉及“魔法”(在这些情况下您仍然需要调用 Notify) . 不知道你为什么要问这个问题。你想知道什么有点模糊。观察者模式类似于常规的 delphi 事件,但具有多监听器。 (添加 self 作为观察者,通过调用方法,将回调作为参数传递)。实施并不完全复杂,而且效率也不低。 #1。没有。#2。没有。#3。是的。回调。代表。拉姆达斯。闭包。 我也对它的实现方式很感兴趣,主要是因为我根本不知道这个功能。我只使用了 XE2 的实时绑定。当时我认为它需要这样的东西。 【参考方案1】:LiveBindings 通过基于某些事件将任何对象与另一个感兴趣的对象绑定来发生。这是通过观察者模式发生的,当有事件触发时,将通知对象检查器,检查器将通知已注册的组件显示更改。
希望这会有所帮助。如果您想深入了解,这里有很多文档。
【讨论】:
以上是关于在 XE3 中使用自动更新进行实时绑定(无需像在 XE2 中那样调用 Notify())的主要内容,如果未能解决你的问题,请参考以下文章