Перейти к основному содержимому
Версия: 11.0.0

Data Binding Syntax (рус: Синтаксис Привязки Данных)

Привязку данных можно указать как в XAML, так и в коде. Для привязки в XAML, используется расширение синтаксиса разметки, описанное в данном разделе.

Data Binding Mark-up Extension (рус: Расширение разметки: Привязка Данных)

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

<SomeControl SomeProperty="{Binding Path, Mode=ModeValue, StringFormat=Pattern}" />

Если используется более одного параметра, то их следует разделять запятой.

ПараметрОписание
PathПуть привязки данных.
ModeОдин из режимов привязки, подробнее далее.
StringFormatШаблон форматирования значения при отображении.
ElementNameМожно сократить, используя # в пути.
ConverterФункция преобразования значения.
RelativeSourceИспользовать визульное дерево, вместо логического.

Data Binding Path (рус: Путь Привязки Данныз)

Обычно, первым параметром указывают путь до источника данных. Это объект из контекста данных, который Avalonia находит при выполнении привязки данных.

Можно не указывать параметр Path, представленные ниже примеры эквивалентны:

<TextBlock Text="{Binding Name}"/>
<TextBlock Text="{Binding Path=Name}"/>

Привязка пути может происходить как напрямую к элементу, так и через цепочку свойств. Например, если источником данных указано свойство Student, а объект, возвращаемый этим свойством, имеет свойство Name, то мы можем привязаться к нему, как указано ниже:

<TextBlock Text="{Binding Student.Name}"/>

Если источких данных представлен в виде массика или списка (с индексом), то вы можете указать конкретный индекс, как показана в примере ниже:

<TextBlock Text="{Binding Students[0].Name}"/>

Empty Binding Path (рус: Пустой Путь Привязки)

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

<TextBlock Text="{Binding}"/>
<TextBlock Text="{Binding .}"/>

Data Binding Mode (рус: Режим Привязки Данных)

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

Пример:

<TextBlock Text="{Binding Name, Mode=OneTime}">

Доступные режимы привязки:

РежимОписание
OneWayИзменение в источнике данных, меняет значение привязки.
TwoWayИзменение в источнике данных, меняет значения привязки. Изменение значения привязки, меняет значение в источнике данных.
OneTimeИзменение в источнике данных - игноруется. Значение привязки берется из источника данных при инициализации привязки.
OneWayToSourceИзменение в источнике данных - игноруется. Изменение значения привязки, меняет значение в источнике данных.
DefaultИспользуется режим привязки, указанный в коде элемента, см. ниже.

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

Например, режим по-умолчанию для TextBlock.Text - OneWay, а для TextBox.Text - TwoWay.

Converting Bound Values (рус: Преобразование Связанных Значений)

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

String Formatting (рус: Форматирование Строк)

Вы можете указать шаблон форматирования отображаемых данных, для привязанного значения. Для этого существует несколько синтаксисов.

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

Пример с фигурными скобками:

<TextBlock Text="{Binding FloatProperty, StringFormat={}{0:0.0}}" />

Пример с обратной косой чертой:

<TextBlock Text="{Binding FloatValue, StringFormat=\{0:0.0\}}" />

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

<TextBlock Text="{Binding Animals.Count, StringFormat='I have {0} animals.'}" />

Обратите внимание, что если ваш шаблон начинается с привязанного значения, то вы обязаны его экранировать:

<TextBlock Text="{Binding Animals.Count, 
StringFormat='{}{0} animals live in the farm.'}" />
к сведению

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

Built-in Conversions (рус: Встроенные преобразователи данных)

Avalonia имеет несколько встроенных преобразователей для привязанных данных, например:

  • StringFormatValueConverter (рус: Преобразователь форматирования строк)
  • Преобразователь проверки на null
  • Преобразователь логических операций
к сведению

Custom Conversions (рус: Пользовательские Преобразователи)

Если ни один из встроенных преобразователей вам не подходит, то вы можете создать собственный.

к сведению

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