Расширение разметки {Binding}

Примечание

Для Windows 10 доступен новый механизм привязки, оптимизированный для производительности и производительности разработчиков. См. расширение разметки {x:Bind}.

Примечание

Общие сведения об использовании привязки данных в приложении с помощью {Binding} (а также о сравнении между {x:Bind} и {Binding}) см. в разделе Привязка данных.

Расширение разметки {Binding} используется для привязки свойств элементов управления к значениям, поступающим из источника данных, например кода. Расширение разметки {Binding} преобразовывается во время загрузки XAML в экземпляр класса Binding. Этот объект привязки получает значение из свойства в источнике данных и передает его в свойство в элементе управления. Объект привязки можно дополнительно настроить таким образом, чтобы он регистрировал изменения значений свойства источника данных и сам обновлялся на основании этих данных. Кроме того, его можно настроить, чтобы он отправлял изменения значения элемента управления назад к свойству источника. Свойство, являющееся целью привязки данных, должно быть свойством зависимостей. Подробнее см. в разделе Общие сведения о свойствах зависимостей.

{Binding} имеет одинаковый с локальным значением приоритет свойства зависимостей, и настройка локального значения в императивном коде удаляет эффект любой привязки {Binding}, настроенной в разметке.

Использование атрибутов XAML

<object property="{Binding}" .../>
-or-
<object property="{Binding propertyPath}" .../>
-or-
<object property="{Binding bindingProperties}" .../>
-or-
<object property="{Binding propertyPath, bindingProperties}" .../>
Термин Описание
Propertypath Строка, указывающая путь свойства для привязки. Подробную информацию см. в разделе Путь свойства ниже.
bindingProperties propName=value[, propName=value]*
Одна или несколько привязок свойств, указанных с помощью синтаксиса пары "имя/значение".
propName Строковое имя свойства, задается в объекте Binding . Например, Converter.
value Значение, которое следует задать для свойства. Синтаксис аргумента зависит от свойства раздела Свойства класса Binding, которые можно задать в {Binding} ниже

Путь к свойству

Path описывает свойство, к которому осуществляется привязка (исходное свойство). Path — это позиционный параметр, то есть вы можете использовать имя параметра явным образом ({Binding Path=EmployeeID}) или можете указать его в качестве первого параметра без имени ({Binding EmployeeID}).

Тип Path — это путь к свойству, являющийся строкой, которая оценивает свойство или подсвойство вашего пользовательского типа или типа инфраструктуры. Тип можно может быть DependencyObject (необязательно). Этапы в пути к свойству разделены точками (.), и вы можете добавить несколько разделителей для прохождения по иерархии. Используйте разделительные точки независимо от языка программирования, используемого для реализации объекта, к которому осуществляется привязка.

Например, чтобы привязать пользовательский интерфейс к свойству объекта имени сотрудника, ваш путь к свойству может быть "Employee.FirstName". Если бы элемент управления элементами привязывался к свойству, содержащему подчиненных сотрудников, то путем свойства мог бы быть Employee.Dependents, а шаблон элемента управления элементами, отобразил бы элементы в Dependents.

Если источником данных выступает коллекция, то в пути свойства можно указывать элементы коллекции по их позиции или индексу. Например, "Teams[0]. Players", где литерал "[]" заключает в себя "0", указывающий первый элемент в коллекции.

При использовании привязки ElementName к существующему DependencyObject частью пути свойства могут быть присоединенные свойства. Для устранения синтаксической неоднозначности присоединенного свойства, когда точка внутри его имени интерпретируется как разделитель шагов пути свойства, заключите назначенное имя присоединенного свойства в скобки. Пример: (AutomationProperties.Name).

Промежуточный объект пути свойства хранится в виде объекта PropertyPath в представлении времени выполнения, но в большинстве сценариев не нужно работать с объектом PropertyPath в коде. Обычно вы можете указать нужные сведения о привязке в коде XAML.

Дополнительную информацию о синтаксисе строки для пути свойства, о путях свойств в областях анимации и о построении объекта PropertyPath см. в разделе Синтаксис Property-path.

Свойства класса привязок, которые можно задать с помощью {Binding}

{Binding} демонстрируется с помощью замещающего синтаксиса bindingProperties поскольку есть несколько свойств, доступных для чтения и записи Binding, которые можно задавать в данном случае использования расширения разметки. Свойства можно задать в любом порядке с помощью парзначенийpropName= с разделителями-запятыми. Для некоторых свойств требуются типы, не предусматривающие преобразования; им необходимы их собственные расширения разметки, вложенные в {Binding}.

Свойство Описание
Путь См. раздел Путь к свойству выше.
Конвертер Указывает объект преобразователя, вызываемый механизмом привязки. Преобразователь можно задать в разметке с помощью расширения разметки {StaticResource}, чтобы ссылаться на этот объект из словаря ресурсов.
ConverterLanguage Указывает язык и региональные параметры, используемые преобразователем. (Если задается Converter.) Язык и региональные параметры задаются как стандартный идентификатор. Дополнительные сведения см. в разделе ConverterLanguage.
ConverterParameter Указывает параметр преобразователя, который можно использовать в логике преобразователя. (Если задается Converter.) Большая часть преобразователей использует простую логику для получения всей необходимой информации из переданного значения, и им не нужно значение ConverterParameter. Параметр ConverterParameter используется для более сложных преобразователей, у которых больше одной условной логики и которым недостаточно информации, переданной в ConverterParameter. Вы также можете написать преобразователь, который использует нестроковые значения, но это используется редко. Подробнее см. в разделе "Примечания" статьи ConverterParameter.
ElementName Задает источник данных, ссылаясь на другой элемент в той же конструкции XAML, имеющий свойство Name или атрибут x:Name attribute. Это часто применяется для общего доступа к связанным значениям или использования подсвойств одного элемента пользовательского интерфейса, чтобы передать определенное значение для другого элемента, например в шаблоне элемента управления XAML.
FallbackValue Задает значение, которое отображается, когда не удается разрешить источник или путь.
Режим Указывает режим привязки как одну из этих строк: OneTime, OneWay или TwoWay. Эти строки соответствуют именам постоянных перечисления BindingMode. Значение по умолчанию — OneWay. Обратите внимание, что это поведение отличается от шаблона по умолчанию для параметра {x:Bind}, значением которого является "OneTime".
RelativeSource Указывает источник данных, описывая положение источника привязки относительно целевого объекта привязки. Это чаще всего используется в привязках в шаблонах элементов управления XAML. Настройка расширения разметки {RelativeSource}.
Источник Указывает источник данных объекта. В расширении разметки Binding свойство Source требует ссылки на объект, например на расширение разметки {StaticResource}. Если это свойство не указано, то источник задается действующим контекстом данных. Обычно значение Source не указывается в отдельных привязках, но используется общий контекст DataContext для нескольких привязок. Дополнительные сведения см. в статье DataContext или Подробно о привязке данных.
TargetNullValue Задает значение, которое отображается, когда значение источника разрешается, но оно явно равно null.
UpdateSourceTrigger Задает время обновления источника привязки. Если значение не задано, по умолчанию используется Default.

Примечание Если вы преобразуете разметку из {x:Bind} в {Binding}, помните о различиях в значениях по умолчанию для свойства Mode .

Converter, ConverterLanguage и ConverterLanguage связаны с сценарием преобразования значения или типа из источника привязки в тип или значение, совместимые со свойством цели привязки. Более подробную информацию и примеры см. в разделе "Преобразования данных" статьи Подробно о привязке данных.

Примечание

Начиная с Windows 10 версии 1607, платформа XAML предоставляет встроенный преобразователь Boolean в Visibility. Преобразователь сопоставляет значение true со значением перечисления Visible , а falseCollapsed , чтобы можно было привязать свойство Visibility к логическому объекту без создания преобразователя. Для использования встроенного преобразователя минимальная версия целевого пакета SDK вашего приложения должна быть 14393 или более поздней. Вы не сможете использовать преобразователь, если ваше приложение предназначено для более ранних версий Windows 10. Дополнительные сведения о целевых версиях см. в статье Адаптивный к версии код.

Source, RelativeSource и ElementName указывают источник привязки, поэтому они являются взаимоисключающими.

Совет Если необходимо указать одну фигурную скобку для значения, например в Path или ConverterParameter, перед ним должна быть обратная косая черта: \{. Также можно включить всю строку, содержащую скобки, которые нужно преобразовать, в дополнительный набор кавычек, например: ConverterParameter='{Mix}'.

Примеры

<!-- binding a UI element to a view model -->    
<Page ... >
    <Page.DataContext>
        <local:BookstoreViewModel/>
    </Page.DataContext>

    <GridView ItemsSource="{Binding BookSkus}" SelectedItem="{Binding SelectedBookSku, Mode=TwoWay}" ... />
</Page>
<!-- binding a UI element to another UI element -->
<Page ... >
    <Page.Resources>
        <local:S2Formatter x:Key="GradeConverter"/>
    </Page.Resources>

    <Slider x:Name="sliderValueConverter" ... />
    <TextBox Text="{Binding Path=Value, ElementName=sliderValueConverter,
        Mode=OneWay,
        Converter={StaticResource GradeConverter}}"/>
</Page>

Во втором примере устанавливается четыре разных свойства Binding: ElementName, Path, Mode и Converter. В этом случае явно показан Path, названный как свойство Binding. Path определяется как источник привязки данных, являющийся другим объектом того же дерева объектов среды выполнения, Slider с именем sliderValueConverter.

Обратите внимание, что значение свойства Converter использует другое расширение разметки, расширение разметки StaticResource, поэтому здесь показано использование двух вложенных расширений разметки. Первой оценивается внутренняя разметка, поэтому как только ресурс получен, привязка может использовать действительный IValueConverter (пользовательский класс, созданный элементом local:S2Formatter в ресурсах).

Поддержка средств

Компонент Microsoft IntelliSense в Microsoft Visual Studio отображает свойства контекста данных при создании {Binding} в редакторе разметки XAML. Как только вы введете "{Binding", в раскрывающемся списке отобразятся свойства контекста данных, соответствующие Path. IntelliSense также помогает с другими свойствами Binding. Для того, чтобы это работало, необходимо иметь или контекст данных, или контекст данных времени разработки, установленные на странице разметки. Команда Перейти к определению (клавиша F12) также работает с {Binding}. Кроме того, вы можете использовать диалоговое окно привязки данных.