Перейти к основному содержимому

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 (рус: Пользовательские Преобразователи)​

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

к сведению

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