Este artigo foi traduzido por máquina. Para visualizar o arquivo em inglês, marque a caixa de seleção Inglês. Você também pode exibir o texto Em inglês em uma janela pop-up, movendo o ponteiro do mouse sobre o texto.
Tradução
Inglês

Visão geral de vinculação de fontes

 

Publicado: junho de 2016

Na vinculação de dados, o origem da associação objeto se refere ao objeto que você obtém seus dados. Este tópico discute os tipos de objetos que você pode usar como a origem da ligação.

Windows Presentation Foundation (WPF) associação de dados suporta o seguinte origem da associação tipos:

Fonte de associação

Descrição

common language runtime (CLR) objetos

Você pode associar a propriedades públicas, subpropriedades, bem como indexadores de qualquer common language runtime (CLR) objeto. O mecanismo de associação usa CLR reflexão para obter os valores das propriedades. Como alternativa, os objetos que implementam ICustomTypeDescriptor ou ter registrado TypeDescriptionProvider também funcionam com o mecanismo de associação.

Para obter mais informações sobre como implementar uma classe que pode servir como uma origem de associação, consulte Implementando uma classe para a origem da ligação mais adiante neste tópico.

objetos dinâmicos

Você pode associar a propriedades disponíveis e indexadores de um objeto que implementa o IDynamicMetaObjectProvider interface. Se você puder acessar o membro no código, você pode vincular a ele. Por exemplo, se um objeto dinâmico permite que você acesse um membro no código por meio de someObjet.AProperty, você pode associar a ela, definindo o caminho de ligação para AProperty.

ADO.NET objetos

Você pode vincular a ADO.NET objetos, como DataTable. O ADO.NET DataView implementa o IBindingList interface, que fornece notificações de alteração que o mecanismo de associação ouve. 

XML objetos

Você pode associar e executar XPath consultas em um XmlNode, XmlDocument, ou XmlElement. Uma maneira conveniente de acessar XML dados que é o origem da associação na marcação é usar um XmlDataProvider objeto. Para obter mais informações, consulte Como: associar dados XML utilizando um XMLDataProvider e consultas XPath.

Você também pode vincular a um XElement ou XDocument, ou associar aos resultados de consultas executadas em objetos desses tipos usando LINQ to XML. Uma maneira conveniente de usar LINQ to XML para acessar dados XML que é a fonte de associação em marcação é usar um ObjectDataProvider objeto. Para obter mais informações, consulte Como: associar a XDocument, XElement ou LINQ para resultados de consulta XML.

DependencyObject objetos

Você pode vincular a Propriedades de dependência de qualquer DependencyObject. Para obter um exemplo, consulte Como: associar as propriedades de dois controles.

Você pode criar suas próprias fontes de associação. Esta seção aborda as coisas que você precisa saber se você estiver implementando uma classe para servir como uma origem de associação.

Se você estiver usando um OneWay ou TwoWay associação (porque você deseja que seu UI atualize quando as propriedades da fonte de associação são alterados dinamicamente), você deve implementar um mecanismo de notificação de alteração de propriedade adequada. O mecanismo recomendado é a CLR ou classe dinâmica para implementar o INotifyPropertyChanged interface. Para obter mais informações, consulte Como: implementar notificação de alteração de propriedade.

Se você criar um CLR objeto não implementa INotifyPropertyChanged, então você deve organizar seu próprio sistema de notificação certificar-se de que os dados usados em uma associação permanecem atuais. Você pode fornecer notificações de alteração, oferecendo suporte a PropertyChanged padrão para cada propriedade que você quiser notificações de alterações. Para oferecer suporte a esse padrão, você deve definir um PropertyNameevento Changed para cada propriedade, onde PropertyName é o nome da propriedade. Você gera o evento sempre que a propriedade é alterada.

Se sua fonte da associação implementa um desses mecanismos de notificação, direcionar atualizações ocorrem automaticamente. Se por algum motivo a origem da ligação não fornece a propriedade apropriada alterado notificações, você tem a opção de usar o UpdateTarget para atualizar a propriedade alvo explicitamente.

A lista a seguir fornece outros pontos importantes a serem observados:

  • Se você deseja criar o objeto XAML, a classe deve ter um construtor padrão. Em alguns .NET linguagens, como C#, o construtor padrão pode ser criado para você.

  • As propriedades que você usar como propriedades de fonte para uma associação de associação devem ser propriedades públicas de sua classe. Propriedades de interfaces definidas explicitamente não podem ser acessadas para fins de associação, nem pode protegidas, privadas, internas ou virtual propriedades que não possuem implementação base.

  • Não é possível associar a campos públicos.

  • O tipo da propriedade declarada em sua classe é o tipo que é passado para a ligação. No entanto, o tipo usado pela associação depende do tipo do alvo da associação propriedade, não da propriedade de origem de associação. Se houver uma diferença de tipo, você talvez queira escrever um conversor para controlar como a propriedade personalizada é inicialmente passada para a associação. Para obter mais informações, consulte IValueConverter.

Você pode usar um objeto inteiro como uma fonte de associação. Você pode especificar uma fonte de associação usando o Source ou o DataContext propriedade e forneça uma declaração de associação em branco: {Binding}. Cenários em que isso é útil incluem associação a objetos que são do tipo cadeia de caracteres, associação a objetos com várias propriedades que você está interessado, ou associação a objetos da coleção. Para obter um exemplo de associação a um objeto de coleção inteira, consulte Como: usar o padrão Master-Detail com dados hierárquicos.

Note que você pode precisar aplicar lógica personalizada para que os dados sejam significativos para as propriedades do alvo ligado. A lógica personalizada pode ser na forma de um conversor personalizado (se o conversor de tipos padrão não existir) ou um DataTemplate. Para obter mais informações sobre conversores, consulte a seção conversão de dados de Visão geral de associação de dados. Para obter mais informações sobre modelos de dados, consulte Visão geral de modelagem de dados.

Geralmente, o objeto que você deseja usar como a origem da ligação é uma coleção de objetos personalizados. Cada objeto serve como a fonte para uma instância de uma associação repetida. Por exemplo, você pode ter um CustomerOrders coleção que consiste em CustomerOrder objetos, onde o aplicativo itera através da coleção para determinar quantos pedidos existem e os dados contidos em cada um.

Você pode enumerar sobre qualquer coleção que implemente o IEnumerable interface. No entanto, para definir associações dinâmicas para que inserções ou exclusões na coleção de atualizem o UI automaticamente, a coleção deve implementar a INotifyCollectionChanged interface. Esta interface expõe um evento que deve ser gerado sempre que a coleção subjacente é modificada.

O ObservableCollection<T> classe é uma implementação embutida de uma coleção de dados que expõe a INotifyCollectionChanged interface. Os objetos de dados individuais dentro da coleção devem satisfazer os requisitos descritos nas seções anteriores. Para obter um exemplo, consulte Como: criar e associar a uma ObservableCollection. Antes de implementar sua própria coleção, considere usar ObservableCollection<T> ou uma coleção existente classes, como List<T>, Collection<T>, e BindingList<T>, entre outros.

WPF não liga diretamente a uma coleção. Se você especificar uma coleção como uma fonte de associação, o WPF realmente associa ao modo de exibição da coleção padrão. Para obter informações sobre modos de exibição padrão, consulte Visão geral de associação de dados.

Se você tiver um cenário avançado e você deseja implementar sua própria coleção, considere usar o IList interface. IList Fornece uma coleção não-genérica de objetos que podem ser acessados individualmente pelo índice, o que pode melhorar o desempenho.

Quando dados de associação, você deve considerar o nível de confiança do aplicativo. A tabela a seguir resume quais tipos podem ser vinculados a em um aplicativo que está executando em confiança parcial ou confiança total de propriedade:

Tipo da Propriedade

(todos os modificadores de acesso)

Propriedade de objeto dinâmico

Propriedade de objeto dinâmico

Propriedade CLR

Propriedade CLR

Propriedade de dependência

Propriedade de dependência

Nível de confiança

Confiança total

Confiança parcial

Confiança total

Confiança parcial

Confiança total

Confiança parcial

Classe pública

Sim

Sim

Sim

Sim

Sim

Sim

Classe não públicos

Sim

Não

Sim

Não

Sim

Sim

Esta tabela descreve os seguintes pontos importantes sobre requisitos de permissão de ligação de dados:

  • Para CLR Propriedades, a associação de dados funciona como o mecanismo de associação é capaz de acessar a propriedade de origem de associação usando reflexão. Caso contrário, o mecanismo de associação emite um aviso de que a propriedade não pode ser encontrada e usa o valor de fallback ou o valor padrão, se estiver disponível.

  • Você pode associar a propriedades em objetos dinâmicos que são definidas no tempo de execução ou tempo de compilação.

  • Você sempre pode associar a Propriedades de dependência.

O requisito de permissão para XML associação é semelhante. Em uma área restrita de confiança parcial, XmlDataProvider falha quando não tem permissões para acessar os dados especificados.

Objetos com um tipo anônimo são internos. Você pode associar a propriedades de tipos anônimos apenas durante a execução em confiança total. Para obter mais informações sobre tipos anônimos, consulte tipos anônimos (c# Programming Guide) ou tipos anônimos (Visual Basic) (Visual Basic).

Para obter mais informações sobre a segurança de confiança parcial, consulte Segurança de confiança parcial do WPF.

Mostrar: