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, <Binding
bindProp1 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 Binding Binding 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
.
BindingGroupName: uma cadeia de caracteres que identifica um possível grupo de vinculação. Este é um conceito de vinculação relativamente avançado; veja a página de referência para BindingGroupName.
BindsDirectlyToSource: Booleano, pode ser qualquer um
true
oufalse
. O padrão éfalse
.Converter: pode ser definido como uma cadeia de caracteres na expressão, mas para isso requer uma referência de objeto para o valor, como uma
bindProp
=value
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 do 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 excludentes versus RelativeSource e Source; cada uma dessas propriedades de vinculação representa uma metodologia de vinculaçã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 qualquer um
true
oufalse
. O padrão éfalse
.Mode: value é um nome constante da BindingMode enumeração. Por exemplo,
{Binding Mode=OneWay}
.NotifyOnSourceUpdated: Booleano, pode ser qualquer um
true
oufalse
. O padrão éfalse
.NotifyOnTargetUpdated: Booleano, pode ser qualquer um
true
oufalse
. O padrão éfalse
.NotifyOnValidationError: Booleano, pode ser qualquer um
true
oufalse
. 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 vinculação representa uma metodologia de vinculaçã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 excludentes versus RelativeSource e ElementName; cada uma dessas propriedades de vinculação representa uma metodologia de vinculaçã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 acoplados. Este é um conceito de vinculação relativamente avançado; veja a página de referência para 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 qualquer um
true
oufalse
. O padrão éfalse
. Consulte Observações.ValidatesOnExceptions: Booleano, pode ser qualquer um
true
oufalse
. 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 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.
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
.NET Desktop feedback
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de