XE3中的实时绑定具有自动更新功能(无需像XE2中那样调用Notify())。

64

我目前正在使用Delphi XE2,听说XE3中有新的Live Binding功能,可以自动更新(无需像XE2中一样调用Notify())。

在C#或Delphi XE2中,我们必须实现INotifyPropertyChanged(在Delphi中为Notify()),这种方法确实很有意义,因为我们可以完全控制要更新的内容以及何时更新它,因此可以轻松地调整性能并实现虚拟化。

但是我想知道它是如何工作的,他们采取了什么样的机制来实现它,我不知道他们是如何做到的,以下是可能用于实现自动更新的假设。

  1. 计时器:计时器定期刷新所有数据

    非常慢的性能,没有虚拟化

  2. 编译器级特性:编译器自动实现与notify()事件相关的所有代码

    很多开销

  3. 其他方法:

请帮我确定他们是如何实现它的。

我目前正在使用XE3试用版,因此无法访问源代码,您的答案将帮助我决定是否切换到新功能
我有一个具有400个属性的类(集合项)需要绑定(并非所有属性始终需要绑定),因此性能对我的应用程序的稳定性起着重要作用。


2
观察者设计模式已经整合到 FireMonkey 和 VCL 中。 - LachlanG
https://plus.google.com/101083836958121708461/posts/emo9qcm2vwo - LachlanG
1
https://plus.google.com/101083836958121708461/posts/h6HSZxQdvqY - LachlanG
3
据我所知,自动更新仅涉及您可以绑定的控件,并且在更改属性时不会对任何数据对象产生“魔力”效果(在这些情况下,您仍然需要调用Notify)。 - Stefan Glienke
2
不确定为什么你在问这个问题。你想知道什么有点含糊不清。观察者模式类似于常规的Delphi事件,但可以有多个监听器。(通过调用方法将自己作为观察者添加,并将回调作为参数传递)。它的实现并不复杂,也不会效率低下。#1.不是。#2.不是。#3.是的。回调。委托。Lambda表达式。闭包。 - Warren P
1
我对它的实现方式也很感兴趣,主要是因为我根本不知道这个功能。我只用过XE2的实时绑定。当时我认为它需要类似这样的东西。 - David
1个回答

2
LiveBindings通过基于一些事件将任何对象与另一个感兴趣的对象绑定在一起。这是通过观察者模式发生的,当有事件触发时,对象检查器将被通知,并且检查器将通知已经注册的组件以显示更改。
希望这可以帮助您。如果您想深入了解,请查看大量的文档。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接