Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Na associação de dados, o objeto de origem de associação refere-se ao objeto do qual você obtém dados. Este artigo discute os tipos de objetos que você pode usar como fonte de associação, como objetos CLR .NET, XML e DependencyObject objetos.
Tipos de origem de vinculação
A associação de dados do WPF (Windows Presentation Foundation) dá suporte aos seguintes tipos de origem de associação:
Objetos CLR (.NET Ambiente de Execução de Linguagem Comum)
Você pode associar a propriedades públicas, sub-propriedades e indexadores de qualquer objeto CLR (Common Language Runtime). O mecanismo de associação usa a reflexão CLR para obter os valores das propriedades. Objetos que implementam ICustomTypeDescriptor ou têm um registro 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 fonte de associação, consulte Implementando uma origem de associação em seus objetos mais adiante neste artigo.
Objetos dinâmicos
Você pode vincular-se a propriedades e indexadores disponíveis de um objeto que implementa a interface IDynamicMetaObjectProvider. Se você pode acessar o membro no código, pode associar a ele. Por exemplo, se um objeto dinâmico permitir que você acesse um membro no código por meio de
SomeObject.AProperty
, você poderá associá-lo definindo o caminho de associação comoAProperty
.objetos ADO.NET
Você pode vincular a objetos ADO.NET, como DataTable. O ADO.NET DataView implementa a interface IBindingList, que fornece notificações de alteração que o mecanismo de associação escuta.
Objetos XML
Você pode associar e executar consultas
XPath
em um XmlNode, um XmlDocument ou um XmlElement. Uma maneira conveniente para acessar dados XML que são a origem da associação na marcação, é usar um objeto XmlDataProvider. Para obter mais informações, consulte Associar a dados XML usando um XMLDataProvider e consultas XPath (.NET Framework).Você também pode associar a um XElement ou XDocument, ou associar aos resultados de consultas executadas em objetos desses tipos, usando o LINQ to XML. Uma maneira conveniente de usar LINQ to XML para acessar dados XML que são a fonte de associação na marcação é usar um objeto ObjectDataProvider. Para obter mais informações, consulte Vincular a XDocument, XElement ou LINQ para Resultados de Consultas XML (.NET Framework).
DependencyObject Objetos
Você pode associar às propriedades de dependência de qualquer DependencyObject. Para obter um exemplo, consulte Associar as propriedades de dois controles (.NET Framework).
Implementar uma origem de associação em seus objetos
Seus objetos CLR podem se tornar fontes de associação. Há algumas coisas a serem observadas ao implementar uma classe para servir como uma fonte de associação.
Fornecer notificações de alteração
Se você estiver usando uma vinculação OneWay ou TwoWay, implemente um mecanismo de notificação de "propriedade alterada" adequado. O mecanismo recomendado é que o CLR ou a classe dinâmica implementem a interface INotifyPropertyChanged. Para obter mais informações, consulte Como implementar a notificação de alteração de propriedade (.NET Framework).
Há duas maneiras de notificar um assinante de uma alteração de propriedade:
Implemente a INotifyPropertyChanged interface.
Esse é o mecanismo recomendado para notificações. O INotifyPropertyChanged fornece o PropertyChanged evento, que o sistema de associação respeita. Ao levantar esse evento e fornecer o nome da propriedade que foi alterada, você notificará um alvo de vinculação sobre a alteração.
Implemente o padrão
PropertyChanged
.Cada propriedade que precisa notificar um destino de associação de que ele foi alterado tem um evento correspondente
PropertyNameChanged
, ondePropertyName
está o nome da propriedade. Você aciona o evento sempre que a propriedade é alterada.
Se a fonte de vinculação implementar um desses mecanismos de notificação, as atualizações de destino ocorrerão automaticamente. Se, por algum motivo, sua origem de associação não fornecer as notificações de alteração de propriedade adequadas, você poderá usar o UpdateTarget método para atualizar explicitamente a propriedade de destino.
Outras características
A lista a seguir fornece outros pontos importantes a serem observados:
Objetos de dados que servem como fontes de associação podem ser declarados em XAML como recursos, desde que tenham um construtor sem parâmetros. Caso contrário, você deve criar o objeto de dados no código e atribuí-lo diretamente ao contexto de dados da árvore de objetos XAML, ou como a fonte de vinculação.
As propriedades que você usa como propriedades de origem de associação devem ser propriedades públicas de sua classe. As propriedades de interface definidas explicitamente não podem ser acessadas para fins de ligação, nem as protegidas, privadas, internas ou virtuais que não possuem implementação base.
Você não pode associar a campos públicos.
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 de destino da associação, e não da propriedade de origem da associação. Se houver uma diferença no tipo, talvez você queira escrever um conversor para lidar com a forma como sua propriedade personalizada é inicialmente passada para a associação. Para obter mais informações, consulte IValueConverter.
Objetos inteiros como uma origem de associação
Você pode usar um objeto inteiro como uma origem de associação. Especifique uma fonte de associação usando a propriedade Source ou a propriedade DataContext, e em seguida forneça uma declaração de associação em branco: {Binding}
. Os 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 em que você está interessado ou associação a objetos de coleção. Para obter um exemplo de associação a um objeto de coleção inteiro, consulte How to Use the Master-Detail Pattern with Hierarchical Data (.NET Framework).
Você pode precisar aplicar lógica personalizada para que os dados sejam significativos para a propriedade vinculada de destino. A lógica personalizada pode estar na forma de um conversor personalizado ou um DataTemplate. Para obter mais informações sobre conversores, consulte Conversão de dados. Para obter mais informações sobre modelos de dados, consulte Visão geral da Modelagem de Dados (.NET Framework).
Objetos de coleção como uma origem de associação
Geralmente, o objeto que você deseja usar como fonte de associação é uma coleção de objetos personalizados. Cada objeto serve como a origem de uma instância de uma associação repetida. Por exemplo, você pode ter uma CustomerOrders
coleção que consiste em CustomerOrder
objetos, em que seu aplicativo itera sobre a coleção para determinar quantos pedidos existem e os dados contidos em cada ordem.
Você pode enumerar em qualquer coleção que implemente a interface IEnumerable. No entanto, para configurar associações dinâmicas para que inserções ou exclusões na coleção atualizem a interface do usuário automaticamente, a coleção deve implementar a interface INotifyCollectionChanged. Essa interface expõe um evento que deve ser gerado sempre que a coleção subjacente é alterada.
A classe ObservableCollection<T> é uma implementação interna de uma coleção de dados que expõe a interface INotifyCollectionChanged. Os objetos de dados individuais dentro da coleção devem atender aos requisitos descritos nas seções anteriores. Para obter um exemplo, consulte Como criar e associar a um ObservableCollection (.NET Framework). Antes de implementar sua própria coleção, considere usar ObservableCollection<T> ou uma das classes de coleção existentes, como List<T>, Collection<T>e BindingList<T>, entre muitas outras.
Quando você especifica uma coleção como uma origem de associação, o WPF não se associa diretamente à coleção. Em vez disso, o WPF realmente se vincula à exibição padrão da coleção. Para obter informações sobre exibições padrão, consulte Usando um modo de exibição padrão.
Se você tiver um cenário avançado e quiser implementar sua própria coleção, considere usar a interface IList. Essa interface fornece uma coleção não genérica de objetos que podem ser acessados individualmente pelo índice, o que pode melhorar o desempenho.
Requisitos de permissão na associação de dados
Ao contrário do .NET Framework, o .NET é executado com segurança de confiança total. Todas as associações de dados são executadas com o mesmo acesso que o usuário que executa o aplicativo.
Consulte também
.NET Desktop feedback