Требуются двунаправленные LiveBindings между элементом управления и объектом

В Delphi XE2 LiveBindings мне нужно привязать элемент управления VCL любого типа к свойству любого типа на произвольном (некомпонентном) объекте. Я могу делать это однонаправленно. Но мне нужно сделать это двунаправленно.

Допустим, я хочу привязать строку TPerson.PersonName: к TEdit.Text.

То, что у меня есть сейчас, просто.

  • Создайте новое приложение VCL, добавьте TBindScope, TBindingsList, TEdit.
  • Создайте экземпляр TPerson с именем person1.
  • Используя BindingList, добавьте свойство TBindExpression.
  • С помощью BindExpression
    • установите ControlComponent на Edit1
    • установите ControlExpression на 'Text'
    • установите SourceComponent на BindScope1
    • установите SourceExpression на PersonName
  • Добавьте кнопку; к событию Click добавляю: BindScope1.DataObject: = person1;
  • Добавить кнопку; к событию Click я добавляю (необходим только один, но пока он не сработает, я попробую их оба).
    • TBindings.Notify (sender, '');
    • BindingsList1.Notify (sender, '');

Первая кнопка выполняет привязку в первом направлении. Вторая кнопка никогда не записывает значение обратно в свойство person1.PersonName.

Я экспериментировал с кодом уведомления, направлением привязки, типами привязки, выражениями, SourceMember и т. Д. Иногда я получаю ошибки времени выполнения в конфигурации bindexpression, в остальное время привязка просто однонаправленная.

Я ожидаю, что нажму вторую кнопку и увижу содержимое Edit1.Text, записанное в person1.PersonName.

Если мне придется делать все это из кода, я рассмотрю это, и такие примеры приветствуются, но я действительно хочу сделать это через дизайнера, если это возможно.

Обратите внимание, что меня не интересует связывание двух элементов управления.

Также обратите внимание, что я уже скачал и проверил образцы проектов LiveBinding и не нашел ни одного, что бы это делало. Если это не так, укажите конкретнее. Я также читал DocWiki. Он не распространяется на двунаправленную привязку, за исключением использования элементов управления LiveBinding DB . Я не использую элементы управления LiveBinding DB и не использую DataSet. Так что, если вы не объясните мне, почему я должен их использовать, мне не понадобится какая-либо информация об этих элементах управления.

19
задан RRUZ 20 September 2011 в 17:23
поделиться