2

我正在编写 FMX Metropolis UI 应用程序并尝试通过 LiveBindings 技术(使用表达式引擎)将两个字符串类型的字段值分配给 TListBox 的 Item.Title 成员。

当我以下列方式使用 TBindList 时:

object BindList1: TBindList
  Category = 'Lists'
  ControlComponent = ListBox1
  SourceComponent = BindSourceDB1
  FormatExpressions = <
    item
      ControlExpression = 'Text'
      SourceExpression =
        'FieldByName("name1").Text + " " + Field' +
        'ByName("name2").Text'
    end>
  FormatControlExpressions = <>
  ClearControlExpressions = <>
end 

它将“name1 name2”字符串分配给成员Text,但我无法设置,ListItemStyle := MetropolisUI因为 TBindList 类中没有这样的属性

如果我使用TLinkFillControlToField

object LinkFillControlToField2: TLinkFillControlToField
      Category = 'Quick Bindings'
      Control = ListBox1
      Track = True
      FillDataSource = BindSourceDB1
      FillDisplayFieldName = 'name1'
      AutoFill = True
      BufferCount = -1
      AutoBufferCount = False
      FillExpressions = <>
      FillHeaderExpressions = <>
      FillBreakGroups = <>
    end

它让我可以分配ListItemStyleMetropolisUI,但是我只能使用FillDisplayFieldName属性访问一个字段,并且没有SourceExpression可以分配'FieldByName("name1").Text + " " + FieldByName("name2").Text'给它的字段。

我试图猜测fromItem.Text成员的上下文,但我没能做到。我研究了 Delphi 示例,但没有 Metropolis TListBox,而且它的行为方式似乎与常见的方式不同。有没有人知道如何找到这个问题的解决方案?TListBoxTBindList

4

1 回答 1

2

感谢@house-of-dexter 的帖子,他给出了一个鼓励我再次尝试的答案。主要问题是字段名的上下文可以在.TLabelTLinkFillControlToFieldSelf.Owner

object LinkFillControlToField2: TLinkFillControlToField
  Category = 'Quick Bindings'
  DataSource = BindSourceDB1
  Control = ListBox1
  Track = True
  FillDataSource = BindSourceDB1
  AutoFill = True
  BufferCount = -1
  AutoBufferCount = False
  ListItemStyle = 'MetropolisUI'
  FillExpressions = <
    item
      SourceMemberName = 'name1'
      ControlMemberName = 'Title'
      CustomFormat = 'Self.Owner.name1.text+" "+Self.Owner.name2.text'
    end>
  FillHeaderExpressions = <>
  FillBreakGroups = <>
end
于 2015-07-03T12:46:22.440 回答