问题标签 [livebindings]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2614 浏览

delphi - TComponent 中的 Observers 属性

嗨 Delphi XE2 TComponent有一个新的“观察者”属性。不幸的是,这方面的帮助条目是空的。有谁知道这个新属性有什么好处以及如何使用它?编辑:嗯,我知道它与 LiveBindings 有关,但我很想知道更多关于它的信息,而且由于我无法访问 XE2 源代码,所以我无法调查自己。

0 投票
2 回答
1573 浏览

delphi - 使用 LiveBindings 监控列表

我一直在尝试找到一种通用方法来通知 UI 控件列表中的更改。例如,当一个对象被添加到列表中时,我希望它自动添加到列表框中。如果从列表中删除了一个对象,我希望它自动从列表框中删除。

不幸的是,Delphi 的列表之间存在一些令人发狂的不一致: TList<>.Notify 很好,但 TStringList.OnChange 甚至没有告诉您更改是什么,而且 TList 甚至没有任何通知!

我希望 LiveBindings 能给我一个适当的方法来监控大多数列表中的变化,但到目前为止我还没有看到它。我见过的所有示例都填充了控件并在列表项和控件项(在我的示例中为列表框项)之间设置了绑定。但是从列表中添加/删除对象根本不会影响控件。

有谁知道我错过的一种机制,或者更一般地说,一种很好的通用方式来做到这一点?

澄清: 我之前好像还不够清楚。我需要一种通用方式的原因是因为我编写了一个网格控件,它可以连接到各种源,包括一些现有的代码。我编写了一个网格接受作为源的接口,然后编写了一些适配器类来接受一些列表并使它们作为该接口可用。由于我也需要接受现有代码,因此无法覆盖 TList.Notify。而且由于没有事件可以看到更改,这实际上意味着 TList 没有客户端可用的通知机制,例如我的适配器类。TStrings 也没有,但 TStringList 引发了一个简单的 OnChange,这意味着适配器类实际上无法确定发生了什么变化。

实际上,我有一个非常好的解决方案,它使用了TVirtualMethodInterceptor,但是在 Delphi XE 中完全停止了工作,并且在 XE2 中没有修复。

0 投票
1 回答
3954 浏览

delphi - 带有 Firemonkey 和 Delphi XE2 的 DB Lookup 字段

我找不到将 TCombobox 与 Firemonkey 中的查找字段绑定的方法。在 VCL 中,您有一个 TDBLookupComboBox,它只需要一个 TDatasource 组件和查找字段名称来填充组合框列表。通过这种方式,您可以在运行时轻松编辑 FK 字段。

在 Firemonkey 中,你所拥有的只是 Livebindings,我不知道如何设置相同的行为。到目前为止,我所做的最好的事情是使用 TBindList 填充组合框列表,并使用连接到查找字段的 TBindDBListLink。通过这种方式,它似乎可以工作,但组合框不允许我更改所选项目。

这是数据库应用程序应该具备的最基本的东西之一,但我不明白为什么还没有人谈论它。

0 投票
1 回答
6420 浏览

delphi - 需要控件和对象之间的双向 LiveBindings

在 Delphi XE2 LiveBindings 中,我需要将任何类型的 VCL 控件绑定到任意(非组件)对象上的任何类型的属性。我可以单向地做到这一点。但我需要双向进行。

假设我想将 TPerson.PersonName: 字符串绑定到 TEdit.Text。

我现在拥有的很简单。

  • 新建一个VCL应用,添加一个TBindScope、TBindingsList、TEdit。
  • 创建一个名为 person1 的 TPerson 实例。
  • 使用 BindingList,添加 TBindExpression 属性。
  • 使用 BindExpression
    • 将 ControlComponent 设置为 Edit1
    • 将 ControlExpression 设置为“文本”
    • 将 SourceComponent 设置为 BindScope1
    • 将 SourceExpression 设置为 PersonName
  • 添加一个按钮;到我添加的 Click 事件:BindScope1.DataObject := person1;
  • 添加一个按钮;到我添加的 Click 事件(只需要一个,但在它起作用之前我会尝试它们)。
    • TBindings.Notify(sender, '');
    • BindingsList1.Notify(sender, '');

第一个按钮绑定在第一个方向。第二个按钮似乎永远不会将值写回 person1.PersonName 属性。

我已经尝试过通知代码、绑定方向、绑定类型、表达式、SourceMember 等。有时我在 bindexpression 配置中遇到运行时错误,其余时间绑定只是单向的。

我希望单击第二个按钮并查看写入 person1.PersonName 的 Edit1.Text 的内容。

如果我必须从代​​码中完成这一切,我会考虑它并且欢迎这样的示例,但如果可能的话,我真的想通过设计器来完成。

请注意,我对两个控件之间的绑定不感兴趣。

还要注意,我已经下载并检查了 LiveBinding 示例项目,但没有找到任何这样做的。如果有错误,请在指出时具体说明。我也读过 DocWiki。它不包括双向绑定,除非使用DB LiveBinding 控件。我没有使用DB LiveBinding 控件,也没有使用 DataSet。因此,除非您能向我解释为什么我应该使用它们,否则我将不需要有关这些控件的任何信息。

0 投票
1 回答
5794 浏览

delphi - LiveBindings - TList绑定到 TStringGrid

我有以下示例代码集,如何将Data列表元素绑定到TStringGrid使用 LiveBindings。我需要双向更新,以便在更改网格中的列时可以更新底层的TPerson.

我已经看到了如何使用TDataset基于绑定执行此操作的示例,但我需要在没有TDataset.

0 投票
2 回答
2114 浏览

delphi - 是否可以将(使用实时绑定)多个组件绑定到(非组件)对象?

我有一个对象,我们称它为控制器,它不是一个组件,它有一个启用的属性。我可以使用实时绑定将其绑定到表单上某些组件的启用属性吗?即,如果我的组件的启用属性发生变化,绑定到它的组件是否会相应地设置其启用属性?

如果 TController 是 TComponent 的后代,我可以看到该怎么做。我知道我可以将我的 TController 包装在一个组件中,但我想问是否有直接的方法可以做到这一点?

0 投票
2 回答
479 浏览

delphi - 可以在 D2010 中执行类似 XE2 LiveBindings 的操作吗?

这是事实还是它使用了一些仅在 XE2 中可用的编译器技术?

我只想将 TEdit.Text 属性绑定(双向)到在代码中返回字符串的对象函数(我不需要设计器组件或表达式评估器)..

谢谢!

0 投票
1 回答
2007 浏览

delphi - Delphi xe2中的实时绑定列表框

如何通过接受对两个列表框中可用的任何列表框的任何更改来同步两个 TListBox 对象。

======================更新============================ ========================= 这个问题在第一次回答后更新

如果我们必须使用

一直在对列表框进行更改,使用 livebibnding 而不是使用的目的是什么

变化无时无刻不在发生。

0 投票
0 回答
1808 浏览

database - Firemonkey 和 Livebindings 与数据库的性能

在 Firemonkey 中,我发现 Livebindings 引擎在将网格与数据库绑定时非常慢。填满 5000 条记录和 10 列的网格需要 30 多秒。

我尝试了 TBindDBGridLink 和 TBindGridLink ,结果是一样的。看起来将填充网格的所有数据都加载到内存中,即使网格没有显示它们。

有什么提高性能的技巧吗?

在 VCL 中,DB 感知组件几乎可以立即获取数据。对于刚开始关注 Windows 的新业务应用程序项目,您认为 VCL 是否仍然是更好的选择?

0 投票
2 回答
3823 浏览

delphi - 如何使用 LiveBindings 在 TStringGrid 中显示超过 200 行?

我有一个TDataSource由 aTClientDataset绑定支持的 a TStringGrid。我通过右键单击网格,选择“ Link to DB Datasource...”,然后选择数据源来做到这一点。这为我设置了 LiveBindings。

当我运行应用程序时,网格只填充了 200 行,即使数据集中有 5000 条记录。

我找不到任何有关如何更改显示的行数或允许用户滚动浏览所有数据的正确方法的文档。

我确实在 unit中找到了硬编码200值,当我将其增加到 时,我在网格中看到了所有 5000 行,但这似乎是一个 hack。TBindScopeDBEnumerator.CreateData.Bind.DBScope10000

在 TStringGrid 中显示超过 200 行的正确方法是什么?