Partilhar via


Extensão de marcação de vinculação

Adia um valor de propriedade para ser um valor associado a dados, criando um objeto de expressão intermediário e interpretando o contexto de dados que se aplica ao elemento e sua associação em tempo de execução.

Uso de expressão de vinculação

<object property="{Binding}" .../>  
-or-  
<object property="{Binding  bindProp1=value1[, bindPropN=valueN]*}" ...  
/>  
-or-  
<object property="{Binding path}" .../>  
-or  
<object property="{Binding path[, bindPropN=valueN]*}" .../>  

Notas de sintaxe

Nestas sintaxes, as [] e * não são literais. Eles fazem parte de uma notação para indicar que zero ou mais pares de bindProp=valor podem ser usados, com um separador de , entre eles e os pares precedentes de bindProp=valor.

Qualquer uma das propriedades listadas na seção "Propriedades de vinculação que podem ser definidas com a extensão de vinculação" pode, em vez disso, ser definida usando atributos de um elemento de objeto Binding. No entanto, esse não é realmente o uso da extensão de marcação do Binding, é apenas o processamento XAML geral de atributos que definem as propriedades da classe Binding CLR. Em outras palavras, <BindingbindProp1="value1"[bindPropN="valueN"]*/> é uma sintaxe equivalente para atributos do elemento de objeto Binding em vez do uso da expressão Binding. Para saber mais sobre o uso do atributo XAML de propriedades específicas de Binding, consulte a seção "Uso de atributos XAML" da propriedade relevante de Binding na Biblioteca de Classes do .NET Framework.

Valores XAML

Valor Descrição
bindProp1, bindPropN O nome da propriedade Binding ou BindingBase a definir. Nem todas as propriedades Binding podem ser definidas com a extensão Binding, e algumas propriedades são configuráveis dentro de uma expressão Binding somente usando outras extensões de marcação aninhadas. Consulte a seção "Propriedades de vinculação que podem ser definidas com a extensão de vinculação".
value1, valueN O valor a que definir a propriedade. A manipulação do valor do atributo é, em última análise, específica para o tipo e a lógica da propriedade Binding específica que está sendo definida.
path A cadeia de caminho que define a propriedade implícita Binding.Path. Consulte também Sintaxe XAML PropertyPath.

Não qualificado {Binding}

O uso de {Binding} mostrado em "Uso de expressão de vinculação" cria um objeto Binding com valores padrão, que inclui uma Binding.Path inicial de null. Isso ainda é útil em muitos cenários, porque o Binding criado pode depender de propriedades importantes de vinculação de dados, como Binding.Path e Binding.Source, que estão definidas no contexto de dados durante a execução. Para obter mais informações sobre o conceito de contexto de dados, consulte Data Binding.

Caminho implícito

A extensão de marcação Binding usa Binding.Path como uma "propriedade padrão" conceitual, onde Path= não precisa aparecer na expressão. Se você especificar uma expressão Binding com um caminho implícito, o caminho implícito deverá aparecer primeiro na expressão, antes de qualquer outro par de bindProp=value em que a propriedade Binding seja especificada pelo nome. Por exemplo: {Binding PathString}, onde PathString é uma cadeia de caracteres avaliada como sendo o valor de Binding.Path no Binding criado pelo uso da extensão de marcação. Você pode acrescentar um caminho implícito com outras propriedades nomeadas após o separador de vírgula, por exemplo, {Binding LastName, Mode=TwoWay}.

Propriedades de associação que podem ser definidas com a extensão de associação

A sintaxe mostrada neste tópico usa a aproximação genérica bindProp=value, porque há muitas propriedades de leitura/gravação de BindingBase ou Binding que podem ser definidas através da sintaxe de extensão/expressão de marcação Binding. Podem ser fixados em qualquer ordem, com exceção de uma Binding.Pathimplícita . (Você tem a opção de especificar explicitamente Path=; nesse caso, ele pode ser definido em qualquer ordem.) Basicamente, você pode definir zero ou mais das propriedades na lista abaixo, usando bindProp=value pares separados por vírgulas.

Vários desses valores de propriedade exigem tipos de objeto que não oferecem suporte a uma conversão de tipo nativo de uma sintaxe de texto em XAML e, portanto, exigem extensões de marcação para serem definidos como um valor de atributo. Verifique a seção Uso de Atributos XAML na Biblioteca de Classes do .NET Framework para cada propriedade para obter mais informações; a cadeia de caracteres usada para sintaxe de atributo XAML com ou sem uso adicional de extensão de marcação é basicamente a mesma que o valor especificado em uma expressão Binding, com a exceção de que você não coloca aspas ao redor de cada bindProp=value na expressão Binding.

A seguir estão as propriedades de Binding que não podem ser definidas usando a extensão de marcação Binding / formulário de expressão{Binding}.

  • UpdateSourceExceptionFilter: Esta propriedade espera uma referência a uma implementação de callback. Métodos de retorno de chamada, exceto os manipuladores de eventos, não podem ser referenciados na sintaxe XAML.

  • ValidationRules: a propriedade aceita uma coleção genérica de ValidationRule objetos. Isso pode ser expresso como um elemento de propriedade em um elemento de objeto Binding, mas não tem nenhuma técnica de análise de atributos prontamente disponível para uso em uma expressão Binding. Consulte o tópico de referência sobre ValidationRules.

  • XmlNamespaceManager

Comentários

Importante

Em termos de precedência de propriedade de dependência, uma expressão Binding é equivalente a um valor definido localmente. Se você definir um valor local para uma propriedade que anteriormente tinha uma expressão Binding, o Binding será completamente removido. Para mais detalhes, consulte Dependency Property Value Precedence.

A descrição da vinculação de dados em um nível básico não é abordada neste tópico. Consulte Visão geral da vinculação de dados.

Observação

MultiBinding e PriorityBinding não oferecem suporte a uma sintaxe de extensão XAML. Em vez disso, você usaria elementos de propriedade. Consulte os tópicos de referência para MultiBinding e PriorityBinding.

Os valores booleanos para XAML não diferenciam maiúsculas de minúsculas. Por exemplo, você pode especificar {Binding NotifyOnValidationError=true} ou {Binding NotifyOnValidationError=True}.

As ligações que envolvem validação de dados geralmente são especificadas por um elemento Binding explícito em vez de como uma expressão {Binding ...}, e definir ValidatesOnDataErrors ou ValidatesOnExceptions em uma expressão é incomum. Isso ocorre porque a propriedade complementar ValidationRules não pode ser prontamente definida na forma de expressão. Para obter mais informações, consulte Implementar validação de vinculação.

Binding é uma extensão de marcação. As extensões de marcação geralmente são implementadas quando há um requisito para escapar de valores de atributos diferentes de valores literais ou nomes de manipuladores, e o requisito é mais global do que os conversores de tipo atribuídos em determinados tipos ou propriedades. Todas as extensões de marcação em XAML usam os caracteres { e } em sua sintaxe de atributo, que é a convenção pela qual um processador XAML reconhece que uma extensão de marcação deve processar o conteúdo da cadeia de caracteres. Para obter mais informações, consulte Markup Extensions e WPF XAML.

Binding é uma extensão de marcação atípica na medida em que a classe Binding que implementa a funcionalidade de extensão para a implementação XAML do WPF também implementa vários outros métodos e propriedades que não estão relacionados ao XAML. Os outros membros destinam-se a tornar Binding uma classe mais versátil e independente que pode abordar muitos cenários de vinculação de dados, além de funcionar como uma extensão de marcação XAML.

Ver também