• 0
Ra72

Расскажите про LiveBinding

Вопросы

Я научился создавать стилизованные списки и мои приложения стали выглядеть более менее красиво.

Теперь встал вопрос про наполнение списков данными.

Решил использовать технологию LiveBinding, но не нашел вменяемого объяснения принципов ее работы для версий XE3 и выше.

Там поменялся компонент-источник для произвольных классов списков. Теперь это PrototypeBindSource (почему прототип, он что не доделан?) вместо BindScope.

Сделал тестовый проект, чтобы протестировать возможности данного компонента, но связать компонент с данными чтобы они отобразились мне не удалось.

Для данных использовал обычный TList<T>.

Расскажите как это работает?

P.S. Связывание вроде бы заработало на простом списке. Теперь надо как то данные записывать в стиль...

В прикрепленном проекте в поле text стиля данные записываются, а как заполнить поле any_text ?

TestBindings.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

14 ответов на этот вопрос

  • 0

Не совсем понятно, что Вы пытаетесь получить.

 

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

Если источник данных не нужен, то можно и без LiveBinding обойтись...

 

Вот сделал небольшое видео.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Спасибо за видео, пригодится для приложений БД. Но у меня источник данных не DataSet, а TList<T>. И еще у итемов листбокса по стилю два поля, не только text.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Нет, как заполнить я знаю, я не знаю как это сделать через LiveBinding и PrototypeBindSource.

Внятного примера не нашел именно использования PrototypeBindSource.

Вот единственный пример, который я нашел: http://www.webdelphi.ru/2012/09/znakomstvo-s-visual-livebindings-v-delphi-xe3/.

Но в нем я не понял как работает событие PrototypeBindSource1CreateAdapter. Вернее, как работает я понял, но там не для списка адаптер.

P.S. Создание в этом методе собственно данных - это шедевр, конечно. Но если их там не создать, вызывается исключение...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
В 29.01.2015 в 05:42, Ra72 сказал:

Нет, как заполнить я знаю, я не знаю как это сделать через LiveBinding и PrototypeBindSource.

Внятного примера не нашел именно использования PrototypeBindSource.

Вот единственный пример, который я нашел: http://www.webdelphi.ru/2012/09/znakomstvo-s-visual-livebindings-v-delphi-xe3/.

Но в нем я не понял как работает событие PrototypeBindSource1CreateAdapter. Вернее, как работает я понял, но там не для списка адаптер.

P.S. Создание в этом методе собственно данных - это шедевр, конечно. Но если их там не создать, вызывается исключение...

нашел решения проблемы ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
В 24.01.2015 в 15:32, Alex Bozhko сказал:

Не совсем понятно, что Вы пытаетесь получить.

 

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

Если источник данных не нужен, то можно и без LiveBinding обойтись...

 

Вот сделал небольшое видео.

 

 

а как можно удалить потом 1 строку из FDMemTable1 ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
6 часов назад, Alex Bozhko сказал:

Метод Delete для FDMemTable1.

Да понял ,удаляет выделенную строку.

А возможно ли как то получить строку как из стринг листа List[1] ? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Очень трудно найти в сети упоминание о том, что PrototypeBind... это исключительно маркетинговый инстумент для создания "Live" демо. Он просто сам от фонаря генерирует данные нескольких типов, и можно их посмотреть в design-time

при работе приложения он никак не должен использоваться

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

krapotkin, Вот мне тоже так показалось. Тогда где же  BindScope ?

GoldenEalge, спасибо большое за видео.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
В 27.11.2016 в 01:25, GoldenEalge сказал:

Да понял ,удаляет выделенную строку.

А возможно ли как то получить строку как из стринг листа List[1] ? 

По моему, Вы несколько не верно трактуете саму идею.

В большинстве случаев Вам не нужно работать ни с Листом ни с компонентами реализации LB.

Вы работаете с набором данных, т. е. в нашем случае с FDMemTable. По сути, всё так же как и в VCL с DataSource. Вы же не обращаетесь к гриду, что бы вытащить значение. Вы обращаетесь к DataSet'у.

Единственное, о чем необходимо позаботиться, что бы при перемещении по Листу шло перемещение по датасету. Но, по умолчанию так и будет, ничего делать не нужно. Исключение было лишь в одной из ранних версий FireDac.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
7 часов назад, Alex Bozhko сказал:

По моему, Вы несколько не верно трактуете саму идею.

В большинстве случаев Вам не нужно работать ни с Листом ни с компонентами реализации LB.

Вы работаете с набором данных, т. е. в нашем случае с FDMemTable. По сути, всё так же как и в VCL с DataSource. Вы же не обращаетесь к гриду, что бы вытащить значение. Вы обращаетесь к DataSet'у.

Единственное, о чем необходимо позаботиться, что бы при перемещении по Листу шло перемещение по датасету. Но, по умолчанию так и будет, ничего делать не нужно. Исключение было лишь в одной из ранних версий FireDac.

Да , неправильно выразился . нужно получить/изменить информацию в FDMemTable

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
В 28.11.2016 в 11:07, Alex Bozhko сказал:

Единственное, о чем необходимо позаботиться, что бы при перемещении по Листу шло перемещение по датасету. Но, по умолчанию так и будет, ничего делать не нужно. Исключение было лишь в одной из ранних версий FireDac.

А вот для ClientDataSet не происходит. Как сделать чтобы происходило?

Изменено пользователем Ra72

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Вопрос снимаю, разобрался. Надо другой линк использовать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу