Extensão de marcação de associação

Adia um valor da propriedade para ser um valor de associação de 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ões de associação

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

Observações sobre a sintaxe

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

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

Valores XAML

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

{Binding} não qualificada

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

Caminho implícito

A Binding extensão de marcação usa Binding.Path como uma "propriedade padrão" conceitual, onde Path= não precisa aparecer na expressão. Se você especificar uma Binding expressão com um caminho implícito, o caminho implícito deverá aparecer primeiro na expressão, antes de quaisquer outros bindProp=value pares em que a Binding propriedade seja especificada por nome. Por exemplo: {Binding PathString}, onde PathString é uma cadeia de caracteres que é avaliada como sendo o valor de no Binding criado pelo uso da extensão de Binding.Path 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}.

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

A sintaxe mostrada neste tópico usa a aproximação genéricabindProp=value, porque há muitas propriedades de leitura/gravação de ou Binding que podem ser definidas por meio da Binding sintaxe de BindingBase extensão/expressão de marcação. Eles podem ser definidos em qualquer ordem, com exceção de um implícito Binding.Path. (Você tem a opção de especificar explicitamente Path= e nesse caso, ela poderá ser definida em qualquer ordem). Basicamente, você pode definir zero ou mais das propriedades na lista abaixo, usando pares bindProp=value separados por vírgulas.

Vários desses valores de propriedade exigem tipos de objeto que não dão suporte a uma conversão de tipo nativo de uma sintaxe de texto em XAML e, portanto, requerem extensões de marcação para serem definidos como um valor de atributo. Consulte a seção Uso do atributo XAML na biblioteca de classes .NET Framework para cada propriedade para obter mais informações. A cadeia de caracteres que você usa para a sintaxe de atributo XAML, com ou sem o uso adicional de extensão de marcação, é basicamente a mesma que o valor que você especifica 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 que não podem ser definidas usando o Binding formulário de extensão/{Binding}expressão de Binding marcação.

  • UpdateSourceExceptionFilter: esta propriedade espera uma referência a uma implementação de retorno de chamada. Retornos de chamada/métodos diferentes de manipuladores de eventos não podem ser referenciados em sintaxe XAML.

  • ValidationRules: A propriedade usa uma coleção genérica de ValidationRule objetos. Isso pode ser expresso como um elemento de propriedade em um Binding elemento de objeto, mas não tem nenhuma técnica de análise de atributos prontamente disponível para uso em uma Binding expressão. Consulte o tópico de referência para 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 um valor local for definido para uma propriedade que tinha uma expressão Binding anteriormente, a Binding será totalmente removida. Para obter mais detalhes, consulte Precedência do valor da propriedade de dependência.

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

Observação

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

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

Ligações que envolvem validação de dados são normalmente especificadas por um elemento explícito Binding em vez de como uma expressão, e a configuração ValidatesOnDataErrors ou ValidatesOnExceptions em uma {Binding ...} expressão é incomum. Isso ocorre porque a propriedade ValidationRules companion não pode ser prontamente definida no formulário de expressão. Para obter mais informações, consulte Implementar validação de associação.

Binding é uma extensão da marcação. As extensões de marcação são tipicamente implementadas quando existe um requisito que permite que valores de atributo sejam diferentes de valores literais ou nomes de manipuladores e o requisito é mais global do que conversores de tipo atribuídos em certos tipos ou propriedades. Todas as extensões de marcação no XAML usam os caracteres { e } na sintaxe de atributo, que é a convenção pela qual o processador XAML reconhece que uma extensão de marcação precisa processar o conteúdo da cadeia de caracteres. Para obter mais informações, consulte Extensões de marcação e XAML do WPF.

Binding é uma extensão de marcação atípica em que a classe que implementa a funcionalidade de extensão para a Binding 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 criar 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.

Confira também