Использование Livebindings для назначения нескольких значений полей для FMX MetropolisUI TListBox Item.Text

Я кодирую приложение пользовательского интерфейса FMX Metropolis и пытаюсь назначить два значения поля типа string элементу Item.Title TListBox с помощью технологии LiveBindings (с использованием механизма выражений).

Когда я использую 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

это позволяет мне назначить ListItemStyle в MetropolisUI, но есть только одно поле, к которому я могу получить доступ FillDisplayFieldName собственности и нет SourceExpression поле для назначения 'FieldByName("name1").Text + " " + FieldByName("name2").Text' к этому.

Я пытался угадать контекст Item.Text член TListBox от TBindList но мне не удалось. Я изучал образцы Delphi, но TListBox Metropolis отсутствует, и, похоже, он действует не так, как обычный. У кого-нибудь есть идеи, как найти решение этой проблемы?

1 ответ

Решение

Благодаря посту @house-of-dexter он дал ответ относительно TLabel это побудило меня попробовать TLinkFillControlToField снова. Основная проблема заключается в том, что контекст имени поля можно найти в Self.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
Другие вопросы по тегам