После изучения выражений привязки и того, как они могут связываться с компонентами, перейдем к компоненту, предназначенному для управления выражениями привязки.
В недавних сообщениях в блоге я рассмотрел основной движок выражений RTL Delphi и привязку компонентов . Теперь мы можем сделать дополнительный шаг и изучить ключевой компонент всей архитектуры привязок, который называется BindingsList. Список привязок — это набор различных типов выражений привязок, управляемых конструкторами.
Другими словами, выражения и привязки компонентов, которые я определил в исходном коде в последнем сообщении блога, могут быть полностью определены в конструкторах (и мастерах) компонента BindingsList. Просто перетащите компонент этого типа в форму плюс несколько визуальных компонентов (в моем примере два редактирования, вращение и индикатор выполнения — см. Изображение ниже).
Компонент BindingsList имеет конструктор, который позволяет определять набор привязок. Каждую привязку можно выбрать с помощью одного из множества доступных вариантов (их слишком много, чтобы исследовать в этой статье, и в основном они сосредоточены на привязках источников данных и полей данных). Я собираюсь использовать здесь два основных параметра: TBindExpression и TBindExprItems.
После выбора одной из этих привязок, скажем TBindExpression, вам необходимо взаимодействовать с двумя разными поверхностями дизайна для работы с выражением: с одной стороны, вы можете настроить свойства выражения в инспекторе объектов, например SourceComponent и ControlComponent (the использование термина для обозначения целевого элемента управления) и связанных выражений; с другой стороны, дважды щелкнув выражение в редакторе BindingList, вы можете открыть нам специальный конструктор выражений, который, в свою очередь, имеет дополнительные редакторы элементов и средства просмотра:
На изображении выше вы можете видеть, что я подключил выражение к исходному и целевому элементам управления, но до сих пор не определил выражение. Это может быть простое имя свойства или более сложная комбинация значений и выражений. Его можно настроить в свойствах выражений инспектора объектов для привязки или в специальном конструкторе, показанном выше. Дизайнер также предлагает возможность оценивать и проверять различные выражения.
Возвращаясь к выражениям, мы можем просто использовать Value и Position для Spin Edit и Progress Bar соответственно. Обратите внимание, что выражение привязки имеет направление (по умолчанию, источник для управления), которое может быть изменено на противоположное или также может быть двунаправленным.
Я использовал двунаправленное выражение для двух полей редактирования, так что при вводе в одно из них содержимое копируется в другое. В этом втором примере я использовал привязку TBindExprItems (но регулярного выражения было бы достаточно). Это более сложная привязка, в которой вы указываете источник и элемент управления (как указано выше), но определяете набор выражений очистки и форматирования, которые могут включать несколько свойств элементов управления. В этом примере отображение текста в текст (двунаправленное), как вы можете видеть ниже:
При всем этом единственный код Delphi, который требуется в приложении, — это вызов для повторной оценки привязок при изменении значения источника. Это легко сделать, обработав события OnChange различных элементов управления и запустив общее обновление привязок для текущего элемента управления ( отправителя ):
[crayon-6740089d5e559882489039/]
Это очень простое приложение в действии:
Теперь вам может быть интересно, где в конечном итоге все эти параметры конфигурации … но, как и большинство других конфигураций времени разработки в Delphi, это не черный цвет для файла формы, который вы можете просматривать как текст (и редактировать, если вы знаете, что делаете) . Вы также можете скопировать компонент из дизайнера и вставить его как текст, как я сделал здесь:
[crayon-6740089d5e561944327384/]
На данный момент это все, даже если я пойму, что коснулся лишь поверхности архитектуры привязок. Следующим шагом в этой серии по выражениям и привязкам являются конструкторы Visual Live Binding, которые основываются на уже знакомых нам частях. Я расскажу об этом в следующий раз.