Документация по Avalonia UI
< Все темы
Печать

Привязки

Вы выполняете привязку в XAML, используя расширение разметки {Binding}. При использовании привязок (при условии, что вы реализовали уведомления об изменениях) любые изменения контекста данных будут автоматически обновляться в элементе управления.

По умолчанию привязка назначается свойству в DataContext, например:

<!-- Binds to the TextBlock's DataContext.Name property -->
<TextBlock Text="{Binding Name}"/>

<!-- Which is the same as ('Path' is optional) -->
<TextBlock Text="{Binding Path=Name}"/>

Пустая привязка привязывается к самому DataContext

<!-- Binds to the TextBlock's DataContext property -->
<TextBlock Text="{Binding}"/>

<!-- Which is the same as -->
<TextBlock Text="{Binding .}"/>

Мы называем свойство элемента управления целью привязки, а свойство DataContextисточником привязки.

Путь привязки

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

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

Вы также можете включить индексаторы массива/списка в пути привязки:

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

Режимы привязки

Вы можете изменить поведение {Binding}, указав режим привязки (Mode):

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

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

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

Предполагается режим по умолчанию, если он не указан. Этот режим обычно является односторонним для свойств элемента управления, которые не изменяются из-за ввода пользователя (например, TextBlock.Text), и двусторонним для свойств элемента управления, которые изменяются из-за пользовательского ввода (например, TextBox.Text).

Форматирование строк

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

<!-- Option 1: Use curly braces {} to escape string format -->
<TextBlock Text="{Binding FloatValue, StringFormat={}{0:0.0}}" />

<!-- Option 2: Use backslash \{ to escape string format -->
<TextBlock Text="{Binding FloatValue, StringFormat=\{0:0.0\}}" />

<!-- Option 3: If the string format does not start with {0}, you don't need to escape the string format. -->
<!-- Note: If you have a whitespace in your string format, surround it with single quotes '' -->
<TextBlock Text="{Binding Animals.Count, StringFormat='I have {0} animals.'}" />
<!-- Note: You need to escape the curly braces in case your format string starts with the value you are binding, like so: -->
<TextBlock Text="{Binding Animals.Count, StringFormat='{}{0} animals live in the farm.'}" />

При наличии параметра StringFormat значение привязки будет преобразовано с использованием StringFormatValueConverter, которому будет передана строка формата.

В отличие от WPF, формат строки необходимо заключить в фигурные скобки и начать с 0: ({0:TheStringFormat}). Если фигурные скобки находятся в начале строки формата, даже если они заключены в одинарные кавычки, вам нужно экранировать их, либо добавив перед ними {}, либо используя обратную косую черту \{ ... \}:

WPF:

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

Avalonia:

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

Дополнительные сведения о доступных форматах строк см. в Microsoft Docs.

Примеры

Базовый пример MVVM

Оглавление