FMX 中是否有 LiveBindings 的替代方案,以便我可以使用线程生成的数据集?

Is there an alternative to LiveBindings in FMX so I can use datasets generated by a thread?

现在我的 FMX 项目完全基于 Livebinding 将数据源连接到我在表单上的编辑器。

效果很好,除了速度慢而且不使用分页加载(TLisView)。

但是,我有许多不同的数据源,数据量可能很大,连接速度最终会很慢。

我的想法是保持用户界面响应并让后台线程加载数据以打开数据源并将它们置于正确的状态。之后将数据源分配给表单上的控件。

我用 LiveBinding 玩过,但我不能将主线程与后台线程混合使用。出现了一些问题。

必须手动将每个字段记录加载到每个控件似乎效率极低。我使用的几乎所有控件都已经包装好了,我自己制作了基于 FMX 控件的控件,因此我可以添加更多功能。

我想知道是否已经完成了一些事情。我可以用来映射源和目标并且我可以控制在需要时激活的任何 class 或库,因为我可以通过一个线程让许多数据源处于加载状态。

这不是一个真正的实时绑定问题。

同样没有实时绑定,当您在线程中检索数据时,您必须遵守线程上下文。从连接获取数据集时,此数据集也绑定到该连接,连接绑定到线程上下文。

解决方案是将数据集复制到客户端数据集中,然后将该 CDS 交给 UI 线程。现在您可以随心所欲地绑定该 CDS。请记住,CDS 和数据连接之间没有连接。您必须小心自己写回更改。

不知道这是否仍然相关。我经常使用实时绑定,使用 TTask.Run 和 Thread.Queue 为底层数据加载时间。重要的一点是让 LiveBinding AutoActivate = FALSE(即 TLinkGridToDataBindSource 或其他实时绑定)。

请求在 TThread.Run 中完成并执行查询,并且 LiveBinding 属性 "Active" 在 TThread.Queue [在 TThread.Run 中设置为 True ]. Livebinding 正在更新 UI 并且必须发生在主线程中。

后面的update/request同理,先把active设置为false。