Привязка расширения разметки

Откладывает значение свойства до значения с привязкой к данным, создает объект промежуточного выражения и интерпретирует контекст данных, который применяется к элементу и его привязке во время выполнения.

Использование выражения привязки

<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.

  • XmlNamespaceManager

Замечания

Внимание

С точки зрения приоритета свойств зависимости выражение 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.

См. также