Привязка расширения разметки
Откладывает значение свойства до значения с привязкой к данным, создает объект промежуточного выражения и интерпретирует контекст данных, который применяется к элементу и его привязке во время выполнения.
Использование выражения привязки
<object property="{Binding}" .../>
-or-
<object property="{Binding bindProp1=value1[, bindPropN=valueN]*}" ...
/>
-or-
<object property="{Binding path}" .../>
-or
<object property="{Binding path[, bindPropN=valueN]*}" .../>
Примечания по синтаксису
В этих синтаксисах []
и *
не являются литералами. Они являются частью нотации, указывая, что можно использовать ноль или более пар bindProp=
value, с помощью разделителя ,
и добавив перед ними пары bindProp=
value.
Все свойства, перечисленные в разделе «Свойства привязки, которые можно задать с помощью расширения привязки», можно задать с помощью атрибутов элемента объекта Binding. Однако это не предполагает конкретно использования расширения разметки Binding, речь просто об обработке XAML атрибутов, которые задают свойства класса CLR Binding. Другими словами, <Binding
bindProp1 value1="
"[
bindPropN valueN="
"]*/>
является эквивалентным синтаксисом атрибутов Binding использования элемента объекта вместо Binding
использования выражения. Сведения об использовании атрибута XAML конкретных свойств Binding см. в разделе «Использование атрибутов XAML» в соответствующем свойстве Binding в библиотеке классов .NET Framework.
Значения XAML
значение | Описание |
---|---|
bindProp1, bindPropN |
Имя свойства Binding или BindingBase, которое требуется задать. Не все свойства Binding можно задать с расширением Binding , а некоторые свойства можно задать в выражении Binding только с помощью дополнительных вложенных расширений разметки. См. раздел «Свойства привязки, которые можно задать с помощью расширения привязки». |
value1, valueN |
Значение, которое следует задать для свойства. Обработка значения атрибута в конечном счете зависит от типа и логики конкретного задаваемого свойства Binding. |
path |
Строка пути, задающая неявное свойство Binding.Path. См. также раздел Синтаксис PropertyPath XAML. |
Unqualified {Binding}
Использование {Binding}
, показанное в разделе «Использование выражения привязки» создает объект Binding со значениями по умолчанию, который включает исходный Binding.Path для null
. Это по-прежнему полезно во многих сценариях, так как созданный Binding может полагаться на свойства привязки ключевых данных, такие как Binding.Path и Binding.Source, заданные в контексте данных среды выполнения. Дополнительные сведения о концепции контекста данных см. в разделе Привязка данных.
Неявный путь
Расширение разметки Binding
использует Binding.Path в качестве концептуального «свойства по умолчанию», где Path=
не обязательно должно отображаться в выражении. При указании выражения Binding
с неявным путем этот неявный путь сначала должен отображаться в выражении, до любых других пар bindProp
=value
, в которых свойство Binding указывается по имени. Например, {Binding PathString}
, где PathString
является строкой, которая вычисляется как значение Binding.Path в Binding, созданном расширением разметки. Можно добавить неявный путь к другим именованным свойствам после разделителя-запятой, например {Binding LastName, Mode=TwoWay}
.
Свойства привязки, которые можно задать с помощью расширения привязки
Синтаксис, показанный в этом разделе, использует универсальное приближение bindProp
=value
, так как существует множество свойств чтения/записи BindingBase или Binding, которые можно задать с помощью расширения разметки или синтаксиса выражений Binding
. Их можно задать в любом порядке, за исключением неявного Binding.Path. (У вас есть возможность явно задать Path=
, в этом случае его можно задать в любом порядке). В основном можно задать ноль или больше свойств в приведенном ниже списке, используя пары bindProp
=value
, разделенные запятыми.
Для некоторых из этих значений свойств требуются типы объектов, которые не поддерживают преобразование собственного типа из текстового синтаксиса в XAML, поэтому, чтобы использовать их как значение атрибута, требуется расширение разметки. Дополнительные сведения см. в разделе «Использование атрибутов XAML» в библиотеке классов платформа .NET Framework для каждого свойства. Строка, используемая для синтаксиса атрибута XAML (с использованием расширения разметки или без нее), в основном совпадает со значением, указанным в выражении Binding
, за исключением того, что не требуется добавлять кавычки вокруг bindProp
=value
в выражении Binding
.
BindingGroupName: строка, которая обозначает возможную группу привязки. Это относительно усовершенствованная концепция привязки; см. справочную страницу для BindingGroupName.
BindsDirectlyToSource: логическое значение; может быть
true
илиfalse
. Значение по умолчанию —false
.Converter: может быть задан как строка
bindProp
=value
в выражении, но для этого требуется ссылка на объект для значения, например расширение разметки StaticResource. Значение в этом случае является экземпляром пользовательского класса преобразователя.ConverterCulture: может быть настроено в выражении как идентификатор на основе стандартов; см. справочный раздел для ConverterCulture.
ConverterParameter: может быть задан в строке
bindProp
=value
в выражении, но это зависит от типа передаваемого параметра. При передаче ссылочного типа для значения такое использование требует ссылки на объект, например, вложенное расширение разметки StaticResource.ElementName: является взаимоисключающим в сравнении с RelativeSource и Source; каждое из этих свойств привязки представляет определенную методологию привязки. См. раздел Общие сведения о привязке данных.
FallbackValue: может быть задан в строке
bindProp
=value
в выражении, но это зависит от типа передаваемого значения. При передаче ссылочного типа требуется ссылка на объект, например, вложенное расширение разметки StaticResource.IsAsync: логическое значение; может быть
true
илиfalse
. Значение по умолчанию —false
.Mode: значение является постоянным именем из перечисления BindingMode. Например,
{Binding Mode=OneWay}
.NotifyOnSourceUpdated: логическое значение; может быть
true
илиfalse
. Значение по умолчанию —false
.NotifyOnTargetUpdated: логическое значение; может быть
true
илиfalse
. Значение по умолчанию —false
.NotifyOnValidationError: логическое значение; может быть
true
илиfalse
. Значение по умолчанию —false
.Path: строка, описывающая путь к объекту данных или к общей объектной модели. Формат предоставляет несколько различных соглашений для обхода объектной модели, которую невозможно в достаточно полной мере рассмотреть в этом разделе. См. раздел Синтаксис PropertyPath в XAML.
RelativeSource: является взаимоисключающим в сравнении с ElementName и Source; каждое из этих свойств привязки представляет определенную методологию привязки. См. раздел Общие сведения о привязке данных. Для указания значения требуется использование вложенного RelativeSource MarkupExtension.
Source: является взаимоисключающим в сравнении с RelativeSource и ElementName; каждое из этих свойств привязки представляет определенную методологию привязки. См. раздел Общие сведения о привязке данных. Требует использования вложенного расширения, как правило, StaticResource, которое ссылается на источник данных объекта из словаря ресурсов с ключом.
StringFormat: строка, описывающая соглашение о формате строки для привязанных данных. Это относительно усовершенствованная концепция привязки; см. справочную страницу для StringFormat.
TargetNullValue: может быть задан в строке
bindProp
=value
в выражении, но это зависит от типа передаваемого параметра. При передаче ссылочного типа для значение требуется ссылка на объект, например, вложенное расширение разметки StaticResource.UpdateSourceTrigger: значение является постоянным именем из перечисления UpdateSourceTrigger. Например,
{Binding UpdateSourceTrigger=LostFocus}
. Некоторые элементы управления могут иметь разные значения по умолчанию для этого свойства привязки. См. раздел UpdateSourceTrigger.ValidatesOnDataErrors: логическое значение; может быть
true
илиfalse
. Значение по умолчанию —false
. См. заметки.ValidatesOnExceptions: логическое значение; может быть
true
илиfalse
. Значение по умолчанию —false
. См. заметки.XPath: строка, описывающая путь к XMLDOM источника данных XML. См. раздел Привязка к XML-данным с помощью XMLDataProvider и запросов XPath.
Ниже приведены свойства Binding, которые нельзя задать с помощью формы расширения разметки Binding
или выражения {Binding}
.
UpdateSourceExceptionFilter: это свойство ожидает ссылку на реализацию обратного вызова. Нельзя создать ссылки на обратные вызовы и методы, отличные от обработчиков событий, в синтаксисе XAML.
ValidationRules: свойство принимает универсальную коллекцию объектов ValidationRule. Его можно выразить как элемент свойства в элементе объекта Binding, но оно не имеет доступных методов синтаксического анализа атрибутов для использования в выражении
Binding
. См. справочную статью для ValidationRules.
Замечания
Внимание
С точки зрения приоритета свойств зависимости выражение Binding
эквивалентно локально заданному значению. Если задать локальное значение для свойства, которое ранее имело выражение Binding
, Binding
удаляется полностью. Дополнительные сведения см. в разделе Приоритет значений свойств зависимостей.
Описание привязки данных на базовом уровне не рассматривается в этом разделе. См. раздел Общие сведения о привязке данных.
Примечание.
MultiBinding и PriorityBinding не поддерживают синтаксис расширения XAML. Вместо этого можно использовать элементы свойств. См. справочные статьи для MultiBinding и PriorityBinding.
Логические значения для XAML не учитывают регистр. Например, можно указать {Binding NotifyOnValidationError=true}
или {Binding NotifyOnValidationError=True}
.
Привязки, предполагающие проверку данных, обычно задаются явным элемента Binding
, а не как выражение {Binding ...}
, а задание ValidatesOnDataErrors или ValidatesOnExceptions в выражении используется редко. Это связано с тем, что свойство-компаньон ValidationRules непросто задать в форме выражения. Дополнительные сведения см. в разделе Реализация проверки привязки.
Binding
является расширением разметки. Расширения разметки обычно реализуются, если требуется заменить значения атрибутов на нелитеральные значения или имена обработчиков и если требуется больше, чем преобразователи типов, относящиеся к определенным типам или свойствам. Все расширения разметки в XAML используют символы {
и }
в синтаксисе их атрибутов, который является соглашением, по которому обработчик XAML узнает, что расширение разметки должно обработать атрибут. Дополнительные сведения см. в разделе Расширения разметки и XAML WPF.
Binding
является нетипичным расширением разметки в том смысле, что класс Binding, реализующий функциональные возможности расширения для реализации XAML WPF, также реализует несколько других методов и свойств, которые не связаны с XAML. Остальные члены призваны сделать Binding более универсальным и автономным классом, который может поддерживать множество сценариев привязки данных, помимо функционирования в качестве расширения разметки XAML.
См. также
.NET Desktop feedback