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
- Преобразователь логических операций
Подробная информация в разделе Reference подраздела Built-in Data Binding Converters (рус: Встроенные Преобразователи для привязанных данных).
Custom Conversions (рус: Пользовательские Преобразователи)
Если ни один из встроенных преобразователей вам не подходит, то вы можете создать собственный.
С примером создания пользовательского преобразователя для привязки картинок, вы можете ознакомиться здесь.