通过LiveBindings将数据源与TListBox链接到标头不起作用

时间:2015-07-07 10:05:40

标签: delphi listbox microsoft-metro firemonkey livebindings

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

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的{​​{1}}属性,但不同步所选记录的真实TListBox。有没有正确的方法来解决这个问题?

enter image description here

1 个答案:

答案 0 :(得分:0)

我尝试使用实时绑定,但发现当你从琐碎的事物转移到现实世界中时,你必须跳过的箍使其工作不值得努力。我想这是一个很好的例子。当你正在做他们想到的&#39; (1项= 1条记录)事情很好但是一旦你离开它就不能再使用快速绑定了,必须开始构建自己的自定义绑定类,这需要比Quick Bindings更深入地理解实时绑定,并且在我的视图有点击败了练习的对象。

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

在我的情况下,我使用的是XE2,我不知道XE5中的事情发生了很多。