Extensão de marcação {Binding}
Observação
Um novo mecanismo de associação está disponível para Windows 10, que é otimizado para desempenho e produtividade do desenvolvedor. Consulte a 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 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 no tempo de carregamento XAML em uma instância da classe Binding . Esse objeto de associação obtém um valor de uma propriedade em uma fonte de dados e o envia por push para a propriedade no controle. Opcionalmente, o objeto de associação pode ser configurado para observar alterações no valor da propriedade da fonte de dados e se atualizar com base nessas alterações. Opcionalmente, ele também pode ser configurado para enviar alterações no valor do controle de volta para a propriedade source. A propriedade que é o destino de uma associação de dados deve ser uma propriedade de dependência. Para obter mais informações, consulte Visão geral das propriedades de dependência.
{Vinculação} tem a mesma precedência de propriedade de dependência que um valor local, e definir um valor local no código imperativo remove o efeito de qualquer {Binding} definido na marcação.
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 |
---|---|
caminho da propriedade | Uma cadeia de caracteres que especifica o caminho da propriedade para a associação. Mais informações estão na seção Caminho da propriedade abaixo. |
bindingProperties | valor propName=[, valor propName=]* Uma ou mais propriedades de associaçã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, "Conversor". |
value | O valor para o qual definir a propriedade . A sintaxe do argumento depende da propriedade de Properties da classe Binding que pode ser definida com a seção {Binding} abaixo. |
Caminho da propriedade
Caminho descreve a propriedade à qual você está associando (a propriedade source). Caminho é um parâmetro posicional, 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 é avaliada como uma propriedade ou subpropriedade do tipo personalizado ou de um tipo de estrutura. O tipo pode ser, mas não precisa ser, um DependencyObject. As etapas em um caminho de propriedade são delimitadas por pontos (.), e você pode incluir vários delimitadores para percorrer subpropriedades sucessivas. Use o delimitador de pontos, independentemente da linguagem de programação usada para implementar o objeto ao qual está sendo associado.
Por exemplo, para associar a interface do usuário à propriedade de nome de um objeto de funcionário, o caminho da propriedade pode ser "Employee.FirstName". Se você estiver associando um controle de itens a uma propriedade que contém os dependentes de um funcionário, o caminho da propriedade poderá ser "Employee.Dependents" e o modelo de item do controle de itens se encarregará de exibir os itens em "Dependentes".
Se a fonte de dados for uma coleção, um caminho de propriedade poderá especificar itens na coleção por sua 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 a um DependencyObject existente, você pode usar propriedades anexadas como parte do caminho da propriedade. Para remover a ambiguidade de uma propriedade anexada para que o ponto intermediário no nome da propriedade anexada não seja considerado uma etapa em um caminho de propriedade, coloque parênteses ao redor do 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 em tempo de execução, mas a maioria dos cenários não precisará interagir com um objeto PropertyPath no código. Normalmente, você pode especificar as informações de associação necessárias usando XAML.
Para obter mais informações sobre a sintaxe de cadeia de caracteres para um caminho de propriedade, caminhos de propriedade em áreas de recursos de animação e construção de um objeto PropertyPath, consulte Sintaxe de caminho de propriedade.
Propriedades da classe Binding que podem ser definidas com {Binding}
{Vinculação} é ilustrado com a sintaxe de espaço reservado bindingProperties porque há várias propriedades de leitura/gravação de uma Binding que podem ser definidas na extensão de marcação. As propriedades podem ser definidas em qualquer ordem com pares de valores propName=separados por vírgulas. Algumas das propriedades exigem tipos que não têm uma conversão de tipo, portanto, elas exigem extensões de marcação próprias aninhadas no {Binding}.
Propriedade | Descrição |
---|---|
Caminho | Consulte a seção Caminho da propriedade acima. |
Conversor | Especifica um objeto 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 a esse objeto de um dicionário de recursos. |
ConverterIdioma | Especifica a cultura a ser usada pelo conversor. (Se você estiver configurando Conversor.) A cultura é definida como um identificador baseado em padrões. Para obter mais informações, consulte ConverterLanguage |
Parâmetro do conversor | Especifica um parâmetro de conversor que pode ser usado na lógica do conversor. (Se você estiver configurando Conversor.) A maioria dos conversores usa lógica simples que obtém todas as informações necessárias do valor passado para converter e não precisa de um valor ConverterParameter . O parâmetro ConverterParameter é para implementações de conversor mais complexas que têm lógica condicional que desativa o que é passado em ConverterParameter. Você pode escrever um conversor que usa valores diferentes de cadeias de caracteres, mas isso é incomum, consulte Comentários em ConverterParameter para obter mais informações. |
ElementName | Especifica uma fonte de dados referenciando outro elemento no mesmo constructo XAML que tem uma propriedade Name ou um atributo x:Name. Isso geralmente é usado para compartilhar valores relacionados ou usar subpropriedades de um elemento de interface do usuário para fornecer um valor específico para outro elemento, por exemplo, em um modelo de controle XAML. |
Valor de fallback | Especifica um valor a ser exibido quando a origem ou o caminho não puder ser resolvido. |
Modo | Especifica o modo de associação, como um destes valores: "OneTime", "OneWay" ou "TwoWay". Eles correspondem aos nomes constantes da enumeração BindingMode . O padrão é "OneWay". Observe que isso difere do padrão para {x:Bind}, que é "OneTime". |
Fonte Relativa | Especifica uma fonte de dados descrevendo a posição da fonte de associação em relação à posição do destino da associação. Isso é usado com mais frequência em associações em modelos de controle XAML. Definindo a extensão de marcação {RelativeSource}. |
Origem | Especifica a fonte de dados do objeto. Na extensão de marcação 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 atuante especificará a origem. É mais comum não especificar um valor Source em associações individuais e, em vez disso, confiar no DataContext compartilhado para várias associações. Para obter mais informações, consulte DataContext ou Associação de dados em detalhes. |
Valor Alvo | Especifica um valor a ser exibido quando o valor de origem for resolvido, mas for explicitamente nulo. |
UpdateSourceTrigger | Especifica o tempo de atualizações de origem de associação. Se não for especificado, o padrão será Padrão. |
Observação Se você estiver convertendo a marcação de {x:Bind} para {Binding}, lembre-se das diferenças nos valores padrão da propriedade Mode .
Converter, ConverterLanguage e ConverterLanguage estão todos relacionados ao cenário de conversão de um valor ou tipo da origem da associação em um tipo ou valor compatível com a propriedade de destino da associação. Para obter mais informações e exemplos, consulte a seção "Conversões de dados" de Associação de dados em detalhes.
Observação
A partir do Windows 10, versão 1607, a estrutura XAML fornece um conversor interno de booliano para visibilidade. O conversor mapeia true para o valor de enumeração Visible e false para Collapsed para que você possa vincular 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 origem de associação, portanto, são mutuamente exclusivas.
Dica Se você precisar especificar uma única chave para um valor, como em Path ou ConverterParameter, preceda-a com uma barra invertida: . \{
Como alternativa, coloque toda a cadeia de caracteres que contém as chaves que precisam ser escapadas em um conjunto de aspas secundário, 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 de vinculação diferentes: ElementName, Path, Mode e Converter. Path , nesse caso, é mostrado explicitamente nomeado 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 chamado sliderValueConverter
.
Observe como o valor da propriedade Converter usa outra extensão de marcação, a extensão de marcação {StaticResource}, portanto, há dois usos de extensão de marcação aninhados aqui. O interno é avaliado primeiro, de modo que, depois que o recurso é obtido, há um IValueConverter prático (uma classe personalizada que é instanciada local:S2Formatter
pelo elemento em recursos) que a associação pode usar.
Suporte a ferramentas
O Microsoft IntelliSense no Microsoft Visual Studio exibe as propriedades do contexto de dados durante a criação de {Binding} no editor de marcação XAML. Assim que você digitar "{Binding", as propriedades de contexto de dados apropriadas para Path serão exibidas na lista suspensa. O IntelliSense também ajuda com as outras propriedades da associação. Para que isso funcione, você deve ter o contexto de dados ou o contexto de 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.