Перейти к содержанию
Fire Monkey от А до Я
  • 0

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


Ra72

Вопрос

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

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

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

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

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

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

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

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

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

TestBindings.zip

Ссылка на комментарий

Рекомендуемые сообщения

  • 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

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

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

Ссылка на комментарий
  • 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
Ссылка на комментарий

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

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

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