Поделиться через


Расширение разметки {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}" .../>
Срок Description
propertyPath Строка, указывающая путь свойства для привязки. Подробную информацию см. в разделе Путь свойства ниже.
bindingProperties Значение propName=[, значение propName=]*
Одна или несколько привязок свойств, указанных с помощью синтаксиса пары "имя/значение".
propName Строковое имя свойства, заданного для объекта Binding . Например, Converter.
значение Значение, которое следует задать для свойства. Синтаксис аргумента зависит от свойства свойства класса Binding, который можно задать с помощью раздела {Binding} ниже.

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

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

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

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

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

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

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

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

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

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

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

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

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

Примечание.

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

Источник, 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>

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

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

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

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