Visão geral sobre associação de fontes

Em associação de dados, o objeto fonte da associação refere-se ao objeto do qual você obtém seus dados. Este tópico discute os tipos de objetos que você pode usar como fonte.

Este tópico contém as seguintes seções.

  • Fonte de uma associação
  • Usando uma classe CLR como o objeto fonte da associação
  • Objetos inteiros usados como uma fonte de associação
  • Objetos de coleção usados como fonte de associação
  • Requisitos de permissão
  • Tópicos relacionados

Fonte de uma associação

Associação de dados no Windows Presentation Foundation (WPF)dá suporte aos seguintes tipos de fonte de associação:

Fonte de associação

Descrição

Objetos do common language runtime (CLR)

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

Consulte a próxima seção para obter mais informações sobre como implementar uma classe que pode servir como um objeto fonte.

Dados ADO.NET

You can bind to ADO.NET objects such as DataTable. The ADO.NET DataView implements IBindingList, providing change notifications that the binding engine listens for.

Para um exemplo, consulte VinculParar Para um ParaDO.NET DParatParaSet exemplo.

Dados XML

Você pode executar e fazer associação a consultas XPath em um XmlNode, XmlDocument ou XmlElement. Uma maneira conveniente para acessar dados XML que são fonte de associação em marcação é usar um objeto XmlDataProvider. Para obter mais informações, consulte Como: Bind to XML Data Using an XMLDataProvider and XPath Queries.

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

DependencyObject

Você pode fazer associação a propriedades de dependência de qualquer DependencyObject. Para um exemplo, consulte Como: Bind the Properties of Two Controls.

Usando uma classe CLR como o objeto fonte da associação

Esta seção aborda os itens que você precisa saber se você estiver implementando uma classe CLR para servir como um objeto fonte.

Fornecer notificações de alteração

Se você estiver usando associação OneWay ou TwoWay (e deseja que sua UI seja atualizada dinamicamente quando as propriedades da fonte sofrerem alteração), você deve implementar um mecanismo adequado de notificação de alterações em propriedades. O mecanismo recomendado é a classe do CLR implementar a interface INotifyPropertyChanged. Para mais detalhes, consulte Como: Implement Property Change Notification.

Caso você não implemente INotifyPropertyChanged, então você deve organizar seu próprio sistema de notificação para certificar-se que os dados usados em uma associação permanecem atuais. Você pode fornecer notificações de alteração dando suporte ao padrão PropertyChanged para cada propriedade para qual você deseja alertas de modificações. Para oferecer suporte a este padrão, defina um evento PropertyNameChanged para cada propriedade, onde PropertyName é o nome da propriedade. Você lança o evento sempre que a propriedade for alterada.

Se seu objeto fonte implementa um mecanismo adequado de notificação, as atualizações ocorrem automaticamente. Se por alguma razão seu objeto fonte não fornece a notificação de propriedade alterada adequada, você tem a opção de usar o método UpdateTarget para atualizar a propriedade alvo explicitamente.

Outras características

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

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

  • As propriedades que você usar como propriedades fonte para uma 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 podem também propriedades privadas, protegidas ou virtuais que não possuem implementação base.

  • Você não pode fazer associação a campos públicos de uma classe do CLR.

  • O tipo da propriedade declarado na sua classe é o tipo que é passado para a associação. No entanto, o tipo usado pela associação depende do tipo da propriedade alvo da associação, não da propriedade fonte. Se houver uma diferença de tipo, convém escrever um conversor para controlar como a propriedade personalizada é inicialmente passada para a associação. Para obter mais informações, consulte IValueConverter.

Objetos inteiros usados como uma fonte de associação

Você pode usar um objeto inteiro como a fonte para uma associação. Isso pode ser concluído especificando o objeto sistema autônomo fonte da vinculação usando o Source ou o DataContext propriedade e, em seguida, não fornecer nenhum caminho além de uma declaração de ligação em branco: {Binding}. Os cenários em que isso é útil incluem associação a objetos que são do tipo sequência de caracteres, associação a objetos com várias propriedades em que você está interessado, ou associação a uma coleção objetos. Para obter um exemplo de associação a um objeto de coleção inteira, consulte Como: Use the Master-Detail Pattern with Hierarchical Data.

Note que você pode precisar aplicar uma lógica personalizada para que os dados tenham significado para a propriedade alvo associada. A lógica personalizada pode ser na forma de um conversor personalizado (se o conversor de tipos padrão não existir) ou de um DataTemplate. Para obter mais informações sobre conversores, consulte a seção Conversão de Dados de Revisão de Associação de Dados. Para obter mais informações sobre modelos de dados, consulte Visão geral sobre Templating de dados.

Objetos de coleção usados como fonte de associação

Frequentemente, o objeto que você deseja usar como fonte é uma coleção de vários objetos personalizados, cada um deles representando um objeto de dados que serve como fonte para uma instância de uma associação repetida. Por exemplo, você pode ter uma coleção de CustomerOrders consistindo de objetos CustomerOrder, onde o aplicativo itera através da coleção para determinar quantos pedidos existem e os dados contidos em cada um deles.

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

WPF Fornece o ObservableCollection<T> classe, que é uma implementação interna de uma coleta de dados que expõe o INotifyCollectionChanged interface. sistema autônomo objetos de dados individuais dentro da coleção devem estar de acordo com sistema autônomo requisitos descritos sistema autônomo seções anteriores. Para obter um exemplo, consulte Como: Create and Bind to an ObservableCollection. Antes de implementar sua própria coleção, considere o uso ObservableCollection<T> ou uma coleção existente, sistema autônomo classes List<T>, Collection<T>, e BindingList<T>, entre muitas outras.

WPF nunca liga diretamente a uma coleção. Se você especificar uma coleção sistema autônomo uma fonte de dados, WPF realmente se vincula a visualização do padrão da coleção. Para obter informações sobre modos de exibição padrão consulte Revisão de Associação de Dados.

Se você tem um cenário avançado e quer implementar sua própria coleção, considere usar IList, que fornece uma coleção de objetos não genéricos que podem ser acessados individualmente por um índice e portanto a melhor performance.

Requisitos de permissão

A tabela a seguir resume com que tipos de propriedade pode-se fazer associação em um aplicativo que está sendo executado em confiança parcial ou confiança total:

Tipo de propriedade

(todos os modificadores de acesso)

Propriedade CLR

Propriedade CLR

Propriedade de dependência

Dependência

  property

Nível de confiança

Confiança total

Confiança parcial

Confiança total

Confiança parcial

Classe pública

Sim

Sim

Sim

Sim

Classe particular

Sim

Não

Sim

Sim

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

  • Para propriedades CLR, a associação de dados funciona, desde que seja possível ao mecanismo de associação acessar a propriedade fonte usando reflexão. Caso contrário, o mecanismo de associação emite um aviso informando que a propriedade não pode ser encontrada e usa o valor de fallback ou o valor padrão, se ele estiver disponível.

  • Você sempre pode fazer associação a propriedades de dependência.

O requisito de permissão de XML ligação é semelhante: em uma área de segurança parcialmente confiável, XmlDataProvider falha quando ele não tem permissões para acesso dados fornecidos.

Para obter mais informações sobre segurança em confiança parcial, consulte Windows Presentation Foundation Partial Trust Security.

Consulte também

Tarefas

Como: Especificar a Fonte de Associação

Conceitos

Revisão de Associação de Dados

WPF Data Binding with LINQ to XML Overview

Otimizando o desempenho: Ligação de Dados

Referência

ObjectDataProvider

XmlDataProvider

Outros recursos

Data Binding How-to Topics