Share via


Extensão de marcação {Binding}

Observação

Um novo mecanismo de associação está disponível para o Windows 10, que é otimizado para desempenho e produtividade do desenvolvedor. Consulte extensão de marcação {x: Bind}.

Observação

Para obter informações gerais sobre como usar a associação de dados em seu aplicativo com {Binding} (e para obter uma comparação completa entre {x:Bind} e {Binding}), consulte Associação de dados em detalhes.

A extensão de marcação {Binding} é usada para associar propriedades de dados em controles a valores provenientes de uma fonte de dados, como código. A extensão de marcação {Binding} é convertida, em um tempo de carregamento XAML, para uma instância da classe Binding. Esse objeto de associação obtém um valor de uma propriedade em uma fonte de dados e empurra-o para a propriedade no controle. O objeto de associação, opcionalmente, pode ser configurado para observar mudanças no valor da propriedade de origem de dados e atualizar-se com base nessas alterações. Ele também pode ser configurado opcionalmente para enviar as alterações para o valor de controle de volta para a propriedade de origem. A propriedade alvo de uma vinculação de dados deve ser uma propriedade de dependência. Para obter mais informações, consulte Dependency properties overview.

{Binding} tem a mesma propriedade de dependência precedente como um valor local, e definir um valor local em código imperativo remove o efeito de qualquer {Binding} definido em marcações.

Uso do atributo XAML

<object property="{Binding}" .../>
-or-
<object property="{Binding propertyPath}" .../>
-or-
<object property="{Binding bindingProperties}" .../>
-or-
<object property="{Binding propertyPath, bindingProperties}" .../>
Termo Descrição
Propertypath Uma cadeia de caracteres que especifica o caminho de propriedade para a associação. Mais informações estão na seção caminho de propriedade abaixo.
bindingProperties Propname=value[, propName=value]*
Uma ou mais propriedades de associação que são especificadas usando uma sintaxe de par nome/valor.
propName O nome da cadeia de caracteres da propriedade a ser definida no objeto Binding . Por exemplo, "Converter".
value O valor para o qual definir a propriedade. A sintaxe do argumento depende da propriedade da seção Propriedades da classe Binding que podem ser definidas com {Binding} abaixo.

Caminho da propriedade

Caminho descreve a propriedade à qual você está se associando (a propriedade de origem). Caminho é um parâmetro de posição, o que significa que você pode usar o nome do parâmetro explicitamente ({Binding Path=EmployeeID}), ou pode especificá-lo como o primeiro parâmetro sem nome ({Binding EmployeeID}).

O tipo de Path é um caminho de propriedade, que é uma cadeia de caracteres que evolui para uma propriedade ou subpropriedade do seu tipo personalizado ou de um tipo de estrutura. O tipo pode ser, mas precisa ser obrigatoriamente, um DependencyObject. Etapas de um caminho de propriedade são delimitadas por pontos (.), e você pode incluir vários delimitadores para percorrer subpropriedades sucessivas. Use o ponto delimitador independentemente da linguagem de programação usada para implementar o objeto sendo associado.

Por exemplo, para associar a interface do usuário à propriedade de primeiro nome de um objeto funcionário, o seu caminho de propriedade pode ser "Employee.FirstName". Se você estiver associando o controle de um item a uma propriedade que contém dependentes de um funcionário, o seu caminho de propriedade pode ser "Employee.Dependents", o modelo de item do controle do item exibiria os itens em "Dependents".

Se a fonte de dados for uma colação, um caminho de propriedade pode especificar itens na coleção pela posição ou índice. Por exemplo, "Teams[0]. Players", em que o literal "[]" inclui o "0" que especifica o primeiro item em uma coleção.

Ao usar uma associação ElementName em um DependencyObject existente, você pode usar propriedade anexadas como parte do seu caminho de propriedade. Para desambiguar uma propriedade anexada para que o ponto intermediário no nome propriedade anexada não seja considerada uma etapa de um caminho de propriedade, coloque parênteses no nome da propriedade anexada qualificada pelo proprietário. Por exemplo: (AutomationProperties.Name).

Um objeto intermediário de caminho de propriedade é armazenado como um objeto PropertyPath em uma representação de tempo de execução, mas a maioria das situações não precisarão interagir com um objeto PropertyPath em código. Geralmente, você pode especificar as informações de associação de que precisa usando XAML.

Para saber mais sobre a sintaxe de cadeia de caracteres para um caminho de propriedade, caminhos de propriedade em áreas com recursos de animação e sobre construir um objeto PropertyPath, consulte: Property-path syntax.

Propriedades da classe Binding que podem ser definidas com {Binding}

{Binding} é ilustrado com a sintaxe de espaço reservado bindingProperties porque há várias propriedades de leitura/escrita de um Binding que podem ser definidas na extensão de marcação. As propriedades podem ser definidas em qualquer ordem com pares devalorpropName= separados por vírgulas. Algumas das propriedades exigem tipos que não têm uma conversão de tipo específica, então são necessárias extensões de marcação próprias aninhadas no {Binding}.

Propriedade Descrição
Path Consulte a seção Caminho de propriedade acima.
Conversor Especifica um objeto de conversor que é chamado pelo mecanismo de associação. O conversor pode ser definido na marcação usando a extensão de marcação {StaticResource} para fazer referência ao objeto de um dicionário de recursos.
ConverterLanguage Especifica a cultura a ser usada pelo conversor. (Se você estiver definindo Converter.) A cultura é definida como um identificador baseado em padrões. Para saber mais, veja ConverterLanguage
ConverterParameter Especifica um parâmetro do conversor que pode ser usado na lógica de conversão. (Se você estiver definindo Converter.) A maioria dos conversores usam lógica simples que obtém todas as informações que precisam do valor calculado para converter, e não precisam de um valor ConverterParameter. O parâmetro ConverterParameter é para implementações de conversores mais complexos que têm mais de uma lógica condicional que controla o que for passado em ConverterParameter. Você também pode escrever um conversor que usa valores diferentes de cadeias de caracteres, mas isso é incomum; veja Comentários em ConverterParameter para saber mais.
ElementName Especifica uma fonte de dados referindo-se a outro elemento na mesma construção XAML que tem uma propriedade Name ou x:Name attribute. Isso costuma ser usado para compartilhar valores relacionados ou usar subpropriedades de um elemento de interface do usuário para fornecer um valor específico a outro elemento; por exemplo, em um modelo de controle XAML.
FallbackValue Especifica um valor a ser exibido quando a fonte ou caminho não podem ser resolvidos.
Mode Especifica o modo de associação como um desses valores: "OneTime", "OneWay" ou "TwoWay". Elas correspondem aos nomes de constantes da enumeração BindingMode. O padrão é "OneWay". Perceba que isso é diferente do padrão para {x:Bind}, que é "OneTime".
RelativeSource Especifica a fonte de dados descrevendo a posição da fonte de associação relativa à posição do destino da associação. Isso geralmente é usado em associações em modelos de controle XAML. Definindo a Extensão de marcação {RelativeSource}.
Fonte Especifica a fonte de dados do objeto. Na extensão de marcação de Binding, a propriedade Source requer uma referência de objeto, como uma referência de extensão de marcação {StaticResource}. Se essa propriedade não for especificada, o contexto de dados de atuação especificará a origem. É mais comum não especificar um valor Source em associações individuais e, em vez disso, usar o DataContext compartilhado para várias associações. Para obter mais informações, consulte DataContext ou Vinculação de dados em detalhes.
TargetNullValue Especifica um valor a ser exibido quando o valor de origem é solucionado, mas é explicitamente null.
UpdateFonteTrigger Especifica o tempo das atualizações da fonte de associação. Se não estiver especificado, o padrão é Default.

Nota Se você estiver convertendo a marcação de {x:Bind} em {Binding}, lembre-se das diferenças nos valores padrão para a propriedade Mode .

Converter, ConverterLanguage e ConverterLanguage estão todos relacionados à situação de conversão de um valor ou tipo de uma fonte de associação a um tipo ou valor que é compatível com a propriedade do destino da associação. Para saber mais, veja a seção "Conversões de dados" em Vinculação de dados em detalhes.

Observação

A partir do Windows 10, versão 1607, a estrutura XAML fornece um Booleano integrado para conversor de Visibilidade. O conversor mapeia true para o valor de enumeração Visible e false para Collapsed para que você possa associar uma propriedade Visibility a um booliano sem criar um conversor. Para usar o conversor integrado, a versão do SDK de alvo mínimo do seu aplicativo deve ser 14393 ou posterior. Você não poderá usá-lo se seu aplicativo for voltado para versões anteriores do Windows 10. Para saber mais sobre as versões de destino, consulte Código adaptável de versão.

Source, RelativeSource e ElementName especificam uma fonte de associação, portanto são mutualmente exclusivas.

Ponta Se você precisar especificar uma única chave para um valor, como em Path ou ConverterParameter, preceda-o com uma barra invertida: \{. De forma alternativa, colo a cadeia de caracteres inteira que contém a chave que precisa de escape entre apóstrofos; por exemplo, ConverterParameter='{Mix}'.

Exemplos

<!-- binding a UI element to a view model -->    
<Page ... >
    <Page.DataContext>
        <local:BookstoreViewModel/>
    </Page.DataContext>

    <GridView ItemsSource="{Binding BookSkus}" SelectedItem="{Binding SelectedBookSku, Mode=TwoWay}" ... />
</Page>
<!-- binding a UI element to another UI element -->
<Page ... >
    <Page.Resources>
        <local:S2Formatter x:Key="GradeConverter"/>
    </Page.Resources>

    <Slider x:Name="sliderValueConverter" ... />
    <TextBox Text="{Binding Path=Value, ElementName=sliderValueConverter,
        Mode=OneWay,
        Converter={StaticResource GradeConverter}}"/>
</Page>

O segundo exemplo define quatro propriedades Binding diferentes: ElementName, Path, Mode e Converter. Path, nesse caso, é mostrado nomeado explicitamente como uma propriedade Binding. O Path é avaliado para uma fonte de vinculação de dados que é outro objeto na mesma árvore de objetos de tempo de execução, um Slider nomeado como sliderValueConverter.

Observe como o valor da propriedade Converter usa outra extensão de marcação, {StaticResource} markup extension, para que haja duas extensões de marcação aninhadas. A interna é avaliada primeiro para que, quando o recurso for obtido, haja um IValueConverter prático (uma classe personalizada exemplificada pelo elemento local:S2Formatter em recursos) que a associação possa usar.

Suporte a ferramentas

O Microsoft IntelliSense no Microsoft Visual Studio exibe as propriedades de contexto dos dados enquanto cria o {Binding} no editor de marcações XAML. Assim que você digita "{Binding", propriedades de contexto dos dados associadas ao Path são exibidas no menu suspenso. IntelliSense também ajuda com as outras propriedades do Binding. Para que isso funcione, você deve ter o contexto de dados ou o contexto dos dados de tempo de design definido na página de marcação. Ir para definição (F12) também funciona com {Binding}. Como alternativa, você pode usar a caixa de diálogo de vinculação de dados.