Контейнеры с динамическим содержимым

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

На базовом уровне контейнер с динамическим содержимым представляет собой контейнер и реплицированное дерево компонентов. Реплицируемое дерево компонентов может быть одним компонентом или корнем дерева компонентов со сложной иерархией дочерних компонентов. В любом случае для каждой строки таблицы данных динамического содержимого в родительском контейнере создается реплика компонента. С помощью привязок, нацеленных на свойства компонентов, каждое реплицированное дерево компонентов может быть настроено на основе данных, содержащихся в таблице данных Динамическое содержимое.

Некоторые возможные варианты использования динамических контейнеров:

  • Гибкий пользовательский интерфейс для различных типов данных: Создание и отображение динамических компонентов пользовательского интерфейса на основе различных наборов данных без необходимости создавать пользовательские интерфейсы для каждого формата данных.

  • Динамические формы: Генерируйте и управляйте формами с полями, которые изменяются на основе пользовательского ввода или данных из внешних источников, обеспечивая персонализированный и адаптивный пользовательский опыт.

  • Динамические объявления: Создайте динамическую страницу объявлений, которая будет обновляться в зависимости от текущего инвентаря, предпочтений пользователя или любых других факторов.

В (вероятном) случае, когда реплицируемое дерево компонентов содержит привязки, специфичные для компонентов внутри дерева компонентов, привязки будут соответствующим образом реплицированы для каждого вложенного реплицируемого контейнера.

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

Фундаментальный пример

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

Создание инструментальной панели с контейнером Простая панель

Создание и изменение инструментальных панелей рассматривается в учебном пособии "Создание отчета о состоянии устройства". Вы можете создать новую инструментальную панель, щелкнув правой кнопкой мыши узел Инструментальные панели в дереве Системном дереве и выбрав Создать.

Добавьте контейнер Простая панель на инструментальную панель.

Добавьте компонент Надпись к компоненту панели.

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

Настройка динамического содержимого в контейнере панели

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

Откройте вкладку Динамическое содержимое, включите свойство Включить Динамическое содержимое и откройте страницу привязки для таблицы Динамическое содержимое.

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

Чтобы реплицировать компонент метки, в переменной Динамическое содержимое должна быть таблица данных. Для каждой строки таблицы в контейнере панели будет создан компонент метки. Настройте привязки для динамического содержимого со следующими данными:

Поле

Значение

Цель

form/panel0:dynamicContentsSource

Выражение

table("<<text><S><D=Text><F=N><M=1>>", "First", "Second", "Third")

При запуске

True

При событии

False

Нажмите OK, чтобы сохранить привязку. Когда компонент загрузится, свойство Динамическое содержимое будет заполнено таблицей данных:

Текст

Первый

Второй

Третий

Чтобы использовать данные из таблицы данных Динамическое содержимое, необходимо настроить привязки для компонента label.

Изменение текста метки с помощью привязок

Для каждой строки таблицы данных Динамическое содержимое будет создан компонент метки. В примере таблицы данных есть поле с именем text. В следующем разделе показано, как ссылаться на значения из этой таблицы данных для управления значением свойства Text . Для того чтобы сослаться на значение в текущей строке из выражения, используютсястандартные ссылки. В данном случае имя нужного поля заключено в фигурные скобки, {text}, чтобы вернуть значение поля в строке по умолчанию. Вспоминая пример с таблицей данных, можно сказать, что для компонентов label значение text будет равно "First", "Second" и "Third".

Откройте редактор свойств компонента label и откройте привязки для свойства Text.

Настройте привязки с данными, указанными в следующей таблице.

Поле

Значение

Цель

form/label0:text

Выражение

{text}

При запуске

True

При событии

True

Выражение будет иметь значение "First" для первой строки таблицы данных Динамическое содержимое, "Second" для второй строки и так далее. Результат выражения будет сохранен в свойстве Text. Нажмите OK , чтобы сохранить привязку.

Чтобы визуально различать динамически создаваемые компоненты, добавьте к стилю контейнера некоторые стили, например черные границы и немного более крупный текст, расположенный по центру:

{ border-style: solid; border-color: black; font-size: 2em; text-align: center; }

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

Чтобы просмотреть инструментальную панель, нажмите кнопку предварительного просмотра:

И вы увидите, что несколько компонентов ярлыков были динамически отображены на основе данных из таблицы данных Динамическое содержимоеs:

Редактирование таблицы данных динамического контейнера во время выполнения

Таблица данных динамического содержимого может быть изменена во время выполнения панели с помощью привязок. В следующем примере рассматривается случай, когда пользователь нажимает компонент кнопки, чтобы вызвать обновление таблицы динамического содержимого.

Добавьте компонент Button в корень инструментальной панели, рядом с компонентом панели. Обратите внимание, что кнопка не находится внутри контейнера панели.

Откройте таблицу привязок компонента панели Динамическое содержимоеs , перейдя в редактор свойств панели > вкладка Динамическое содержимое > значок привязок Динамическое содержимое.

Добавьте в таблицу привязок еще одну строку с немного измененным выражением. Выражение оценивает таблицу данных с дополнительной строкой со значением "Кнопка нажата".

Поле Activator указывает, что эта привязка должна срабатывать только при наступлении указанного события, а ниже указано событие Mouse Clicked компонента Button.

Поле

Значение

Цель

form/panel0:dynamicContentsSource

Выражение

table("<<text><S><D=Text><F=N><M=1>>", "First", "Second", "Third", "Button Clicked")

Активатор

form/button0:mouseClicked@

При запуске

False

При событии

True

Нажмите OK, чтобы сохранить привязку.

Откройте таблицу привязок для свойства Text компонента label, которая находится в редакторе свойств компонента label.

Измените привязку, добавив в качестве активатора событие Динамическое содержимое обновлено, которое обеспечит повторную оценку привязки при каждом изменении таблицы Динамическое содержимое .

Поле

Значение

Цель

form/label0:text

Выражение

{значение}

Активатор

form/panel0:dynamicContentsRefreshed@

При запуске

Ложь

При событии

True

Нажмите OK, чтобы сохранить привязку.

Откройте предварительный просмотр инструментальной панели и увидите только что созданный компонент кнопки с тремя динамически созданными компонентами меток:

После щелчка на компоненте кнопки создается четвертый компонент метки:

Пагинация.

Свойства Число элементов на странице, Показать селектор «Число элементов на странице», Тип селектора «Число элементов на странице» и Пользовательские значения селектора «Число элементов на странице» позволяют управлять количеством динамических компонентов, отображаемых пользователю на каждой "странице" контейнера.

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

Чтобы увидеть, как это работает, установите следующие значения в редакторе свойств панели: .

Свойство

Значение

Число элементов на странице

2

Показать селектор «Число элементов на странице»

True

Тип селектора «Число элементов на странице»

Группа кнопок

Пользовательские значения селектора «Число элементов на странице»

Оставьте значения по умолчанию.

Предварительно просмотрите инструментальную панель, чтобы увидеть, что инструменты пагинации и селекторы появились в нижней части контейнера:

С помощью инструментов пагинации можно отобразить вторую страницу компонентов:

Пользовательский div идентификатор компонента

По умолчанию id элемента html div, содержащего каждый динамический компонент, - это название компонента с увеличивающимся целым числом в конце. Например, label1, label2, label3 и так далее. Может возникнуть необходимость в создании собственных идентификаторов div для динамически создаваемых компонентов. В этом случае можно использовать Выражение суффикса для имён компонентов, чтобы обеспечить больший контроль над значением, добавляемым к идентификаторам div.

Установите свойство Выражение суффикса для имён компонентов в значение "_clone_"+{#row} + {text}, чтобы добавить дополнительный текст к идентификатору div. С помощью HTML-инспектора браузера можно увидеть настроенные идентификаторы div:

Ручное позиционирование

Чтобы "вручную" управлять позиционированием компонентов в динамическом контейнере, примените привязку к свойствам Column и Row компонента label и укажите пользовательские значения, взятые из таблицы Динамическое содержимое или из других мест.

Для примера установите свойство Компоновку компонента панели на Абсолютный.

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

Откройте таблицу привязок для свойств Колонка и Строка и добавьте для каждого из них строку привязки со значениями, указанными в таблице. Выражение {#row}*75 принимает значение {#row}, которое является номером строки, оцениваемой в данный момент, и умножает его на 75. Первый компонент будет размещен в точке (0,0), следующий ряд - в точке (75,75), а третий - в точке (150,150), создавая каскадный эффект.

Поле

Значение

Цель

form/label0:gridx для столбца и form/label0:gridy для строки

Выражение

{#row}*75

Активатор

form/panel0:dynamicContentsRefreshed@

При запуске

True

При событии

True

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

Поведение панели с шагами, панели вкладок и карусели

Компоненты панель вкладок, панель с шагами и карусель можно настроить как динамические контейнеры. В этом случае созданный вложенный элемент (вкладка, шаг или панель, соответственно) будет генерироваться динамически.

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