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, <Binding
bindProp1="
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
.
BindingGroupName: uma cadeia de caracteres que identifica um possível grupo de ligação. Trata-se de um conceito vinculativo relativamente avançado; consulte a página de referência para BindingGroupName.
BindsDirectlyToSource: Booleano, pode ser
true
oufalse
. O padrão éfalse
.Converter: pode ser definido como uma cadeia de caracteres
bindProp
=value
na expressão, mas para isso é necessária uma referência de objeto para o valor, como uma StaticResource Markup Extension. O valor, neste caso, é uma instância de uma classe de conversor personalizada.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 cadeia de
bindProp
=value
na expressão, mas isso depende do tipo do parâmetro que está sendo passado. Se passar um tipo de referência para o valor, esse uso requer uma referência de objeto, como uma extensão de marcação StaticResource aninhada.ElementName: mutuamente exclusivos versus RelativeSource e Source; cada uma destas propriedades de ligação representa uma metodologia de ligação particular. Consulte Visão geral da vinculação de dados.
FallbackValue: pode ser definido como uma cadeia de caracteres
bindProp
=value
na expressão, mas isso depende do tipo do valor que está sendo passado. Se passar um tipo de referência, requer uma referência de objeto, como um aninhado StaticResource Markup Extension.IsAsync: Booleano, pode ser
true
oufalse
. O padrão éfalse
.Mode: valor é um nome constante da enumeração BindingMode. Por exemplo,
{Binding Mode=OneWay}
.NotifyOnSourceUpdated: Booleano, pode ser
true
oufalse
. O padrão éfalse
.NotifyOnTargetUpdated: Booleano, pode ser
true
oufalse
. O padrão éfalse
.NotifyOnValidationError: Booleano, pode ser
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 a sintaxe XAML de PropertyPath indicada em .
RelativeSource: mutuamente exclusiva versus ElementName e Source; cada uma dessas propriedades de ligação representa uma metodologia de ligação particular. Consulte Visão geral da vinculação de dados. Requer o uso aninhado de RelativeSource MarkupExtension para especificar o valor.
Source: mutuamente exclusivo em relação a RelativeSource e ElementName; Cada uma destas propriedades de ligação representa uma metodologia de ligação particular. Consulte Visão geral da vinculação de dados. Requer a utilização de uma extensão aninhada, normalmente um StaticResource Markup Extension que se refere a uma fonte de dados de objeto de um dicionário de recursos identificados por chave.
StringFormat: uma cadeia de caracteres que descreve uma convenção de formato de cadeia de caracteres para os dados acoplados. Trata-se de um conceito vinculativo relativamente avançado; consulte a página de referência para StringFormat.
TargetNullValue: pode ser definido como uma cadeia de
bindProp
=value
na expressão, mas isso depende do tipo do parâmetro que está sendo passado. Se passar um tipo de referência para o valor, requer uma referência de objeto, como um aninhado StaticResource Markup Extension.UpdateSourceTrigger: valor é um nome constante da enumeração UpdateSourceTrigger. Por exemplo,
{Binding UpdateSourceTrigger=LostFocus}
. Controles específicos potencialmente têm valores padrão diferentes para essa propriedade de vinculação. Ver UpdateSourceTrigger.ValidatesOnDataErrors: Booleano, pode ser
true
oufalse
. O padrão éfalse
. Ver Observações.ValidatesOnExceptions: Booleano, pode ser
true
oufalse
. O padrão éfalse
. Ver Observações.XPath: uma cadeia de caracteres que descreve um caminho para o XMLDOM de uma fonte de dados XML. Consulte Vinculação a dados XML usando um XMLDataProvider e consultas XPath.
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.
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
- Binding
- Visão geral da vinculação de dados
- XAML no WPF
- Markup Extensions e WPF XAML
.NET Desktop feedback