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


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

Замечание

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

Замечание

Общая информация об использовании привязки данных в вашем приложении с {Binding} (а также для полного сравнения между {x:Bind} и {Binding}) см. в Data binding in depth.

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

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

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

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

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

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

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

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

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

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

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

Недвижимость Описание
Путь См. приведенный выше раздел пути свойства .
преобразователь Указывает объект преобразователя, вызываемый подсистемой привязки. Преобразователь можно задать в разметке с помощью расширения разметки {StaticResource} для ссылки на этот объект из словаря ресурсов.
Конвертер языка Указывает культуру, используемую преобразователем. (Если вы задаете Конвертер.) Культура задается как стандартный идентификатор. Дополнительные сведения см. в разделе 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.

преобразователь, язык преобразования и язык преобразования — все это относится к сценарию преобразования значения или типа из источника привязки в тип или значение, совместимое с целевым свойством привязки. Дополнительные сведения и примеры см. в разделе "Преобразования данных" , в подразделе "глубокая привязка данных".

Замечание

Начиная с Windows 10 версии 1607 платформа XAML предоставляет встроенный логический преобразователь видимости. Преобразователь сопоставляет true со значением перечисления Visible и false со значением Collapsed, чтобы можно было привязать свойство Видимости к логическому значению без создания преобразователя. Чтобы использовать встроенный преобразователь, минимальная целевая версия пакета 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 привязки. пути оценивается в источнике привязки данных, который является другим объектом в том же дереве объектов времени выполнения, ползунок с именем .

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

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

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