1

我在 Delphi XE5 中编写 FMX 城市应用程序时遇到了数据源和 TListBox 同步错误。它可以正常工作,直到有一个组合一个或多个项目的组标题。ListBox选择组中( ListItemStyle= )的第一项MetropolisUI会导致其从列表中消失(它变得不可见,这不会影响数据集本身)。

object LinkListControlToField1: TLinkListControlToField
      Category = 'Quick Bindings'
      DataSource = BindSourceDB1
      FieldName = 'name2'
      Control = ListBox1
      FillExpressions = <
        item
          SourceMemberName = 'photo_mini'
          ControlMemberName = 'Icon'
        end
        item
          SourceMemberName = 'diagnosis_short'
          ControlMemberName = 'Description'
        end
        item
          ControlMemberName = 'Title'
          CustomFormat = 'self.owner.name1.text+" "+self.owner.name2.text'
        end>
      ListItemStyle = 'MetropolisUI'
      AutoBufferCount = False
      FillHeaderExpressions = <>
      FillBreakFieldName = 'ward'
      FillHeaderCustomFormat = '"Ward "+ward.text'
      FillBreakGroups = <>
    end
  end

我用来重现错误的以下简化项目以不同的方式起作用,但问题的问题几乎相同。我们只需要一个带有PrototypeBindSource1: TPrototypeBindSource;(生成文字和整数字段)的表单,BindingsList1: TBindingsList; ListBox1: TListBox;Edit1: TEdit;是 LiveBindings 链接:

object BindingsList1: TBindingsList
Methods = <>
OutputConverters = <>
Left = 20
Top = 5
object LinkListControlToField1: TLinkListControlToField
  Category = 'Quick Bindings'
  DataSource = PrototypeBindSource1
  FieldName = 'ContactName1'
  Control = ListBox1
  FillExpressions = <>
  AutoBufferCount = False
  FillHeaderExpressions = <>
  FillHeaderFieldName = 'UIntField1'
  FillBreakGroups = <>
end
object LinkControlToField1: TLinkControlToField
  Category = 'Quick Bindings'
  DataSource = PrototypeBindSource1
  FieldName = 'ContactName1'
  Control = Edit1
  Track = False
end

项目的选择与 DataSource (DataSet) 中所选记录的 id 不对应。似乎 LiveBindings 引擎同步了所选记录的ItemIndex属性,TListBox但不是真实的。id有没有解决问题的正确方法?

在此处输入图像描述

4

1 回答 1

0

我尝试使用实时绑定,但发现当你从琐碎进入现实世界的那一刻,你必须跳过这些箍以使其工作不值得付出努力。我认为这是一个很好的例子。当您在做“他们所想的”(1 项 = 1 条记录)时,一切都很好,但是一旦您离开,您就不能再使用快速绑定,而必须开始构建自己的自定义绑定类,这需要更深入的了解实时绑定比快速绑定,在我看来有点挫败练习的目标。

因此,除非您想坚持简单的做事方式,否则我认为没有简单的答案。

在我的情况下,我使用的是 XE2,我不知道 XE5 中的进展情况。

于 2015-07-07T16:00:08.817 回答