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 associação que podem ser definidas com a extensão de associação" pode 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 Binding, é apenas o processamento XAML geral de atributos que definem as propriedades da classe CLR Binding . Em outras palavras, <Binding
="
value1 "[
bindPropN="
valueN"]*/>
é uma sintaxe equivalente para atributos de uso de elemento de Binding objeto em vez de um Binding
uso de expressão. Para saber mais sobre o uso do atributo XAML de propriedades específicas do Binding, consulte a seção "Uso do atributo XAML" da propriedade relevante de na Biblioteca de Classes do Binding .NET Framework.
Valores XAML
Valor | Descrição |
---|---|
bindProp1, bindPropN |
O nome da Binding propriedade or BindingBase a ser definida. Nem todas as Binding propriedades podem ser definidas com a Binding extensão, e algumas propriedades são configuráveis em uma Binding expressão somente usando outras extensões de 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 . A manipulação do valor do atributo é, em última análise, específica 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 associação" cria um Binding objeto com valores padrão, que inclui uma inicial Binding.Path de null
. Isso ainda é útil em muitos cenários, pois o criado Binding pode estar contando com as principais propriedades de associação de dados, como Binding.Path e Binding.Source sendo definido no contexto de dados em 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 qualquer outrobindProp
=value
par em que a Binding propriedade seja especificada pelo nome. Por exemplo: {Binding PathString}
, onde PathString
é uma cadeia de caracteres que é 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}
.
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
, pois há muitas propriedades de leitura/gravação de ou BindingBase que podem ser definidas por meio da Binding sintaxe de extensão/expressão de Binding
marcação. Eles podem ser definidos em qualquer ordem, com exceção de um .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
.
BindingGroupName: uma cadeia de caracteres que identifica um possível grupo de ligações. Este é um conceito de ligação relativamente avançado; Consulte a página de referência do BindingGroupName.
BindsDirectlyToSource: Booleano, pode ser ou
true
false
. O padrão éfalse
.Converter: pode ser definido como uma
bindProp
=value
cadeia de caracteres na expressão, mas para fazer isso é necessária uma referência de objeto para o valor, como uma extensão de marcação StaticResource. Nesse caso, o valor é uma instância de uma classe de conversor personalizado.ConverterCulture: configurável na expressão como um identificador baseado em padrões; Consulte o tópico de referência para ConverterCulture.
ConverterParameter: pode ser definido como uma
bindProp
=value
cadeia de caracteres na expressão, mas isso depende do tipo do parâmetro que está sendo passado. Se estiver passando um tipo de referência para o valor, esse uso exigirá uma referência de objeto, como uma Extensão de marcação StaticResource aninhada.ElementName: mutuamente exclusivo versus RelativeSource e Source; cada uma dessas propriedades de ligação representa uma metodologia de ligação particular. Consulte Visão geral de vinculação de dados.
FallbackValue: pode ser definido como uma
bindProp
=value
cadeia de caracteres na expressão, mas isso depende do tipo do valor que está sendo passado. Se estiver passando um tipo de referência, exigirá uma referência de objeto, como uma Extensão de marcação StaticResource aninhada.IsAsync: Booleano, pode ser ou
true
false
. O padrão éfalse
.Mode: value é um nome constante da BindingMode enumeração. Por exemplo,
{Binding Mode=OneWay}
.NotifyOnSourceUpdated: Booleano, pode ser ou
true
false
. O padrão éfalse
.NotifyOnTargetUpdated: Booleano, pode ser ou
true
false
. O padrão éfalse
.NotifyOnValidationError: Booleano, pode ser ou
true
false
. O padrão éfalse
.Path: uma cadeia de caracteres que descreve um caminho para um objeto de dados ou um modelo de objeto geral. O formato fornece várias convenções diferentes para percorrer um modelo de objeto que não pode ser descrito adequadamente neste tópico. Consulte Sintaxe XAML de PropertyPath.
RelativeSource: mutuamente exclusivo versus com ElementName e Source; cada uma dessas propriedades de ligação representa uma metodologia de ligação particular. Consulte Visão geral de vinculação de dados. Exige o uso de uma MarkupExtension RelativeSource aninhada para especificar o valor.
Source: mutuamente exclusivo versus RelativeSource e ElementName; cada uma dessas propriedades de ligação representa uma metodologia de ligação particular. Consulte Visão geral de vinculação de dados. Exige o uso de uma extensão aninhada, normalmente uma extensão de marcação StaticResource, que faz referência a um objeto de fonte de dados de um dicionário de recursos com chave.
StringFormat: uma cadeia de caracteres que descreve uma convenção de formato de cadeia de caracteres para os dados associados. Este é um conceito de ligação relativamente avançado; Consulte a página de referência do StringFormat.
TargetNullValue: pode ser definido como uma
bindProp
=value
cadeia de caracteres na expressão, mas isso depende do tipo do parâmetro que está sendo passado. Se estiver passando um tipo de referência para o valor, exigirá uma referência de objeto, como uma Extensão de marcação StaticResource aninhada.UpdateSourceTrigger: value é um nome constante da UpdateSourceTrigger enumeração. Por exemplo,
{Binding UpdateSourceTrigger=LostFocus}
. Controles específicos têm, potencialmente, valores padrão diferentes para essa propriedade de associação. Consulte UpdateSourceTrigger.ValidatesOnDataErrors: Booleano, pode ser ou
true
false
. O padrão éfalse
. Consulte Observações.ValidatesOnExceptions: Booleano, pode ser ou
true
false
. O padrão éfalse
. Consulte Observações.XPath: uma cadeia de caracteres que descreve um caminho para o XMLDOM de uma fonte de dados XML. Consulte Associar a dados XML usando um XMLDataProvider e consultas XPath.
A seguir estão as propriedades que não podem ser definidas usando a Binding extensão de marcação/Binding
formulário de {Binding}
expressão.
UpdateSourceExceptionFilter: essa 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 atributo prontamente disponível para uso em uma
Binding
expressão. Consulte o tópico de referência para ValidationRules.
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 não dão suporte a uma sintaxe PriorityBinding 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}
.
As associações que envolvem validação de dados normalmente são especificadas por um elemento explícito Binding
em vez de como uma {Binding ...}
expressão, e a configuração ValidatesOnDataErrors ou ValidatesOnExceptions em uma expressão é incomum. Isso ocorre porque a propriedade ValidationRules companion não pode ser prontamente definida na forma 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 Binding classe 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 criar Binding uma classe mais versátil e independente que possa lidar com muitos cenários de associação de dados, além de funcionar como uma extensão de marcação XAML.
Confira também
.NET Desktop feedback