Использование Livebindings для присвоения нескольких значений поля элементу FMX MetropolisUI TListBox.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, но Metropolis TListBox отсутствует, и похоже, что он действует не так, как обычный. У кого-нибудь есть идеи, как найти решение этой проблемы?


person asd-tm    schedule 03.07.2015    source источник


Ответы (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
person asd-tm    schedule 03.07.2015