Partilhar via


Visão geral sobre associação de fontes

Em ligação de dados, o origem da ligação objeto refere-se ao obter os dados de objeto. Este tópico discute os tipos de objetos que você pode usar como a origem da ligação.

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

  • Tipos de fonte de ligação
  • A implementação de uma classe para a origem da ligação
  • Usando objetos de inteiro como uma fonte de ligação
  • Usando a coleção de objetos como uma fonte de ligação
  • Requisitos de permissão de ligação de dados
  • Tópicos relacionados

Tipos de fonte de ligação

Windows Presentation Foundation (WPF)ligação de dados suporta os seguintes a origem de ligação tipos:

Binding Source

Description

common language runtime (CLR)objetos

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

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

objetos dinâmicos

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

ADO.NETobjetos

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

XMLobjetos

You can bind to and run XPath queries on an XmlNode, XmlDocument, or XmlElement. A convenient way to access XML data that is the binding source in markup is to use an XmlDataProvider object. For more information, see Como: Bind to XML Data Using an XMLDataProvider and XPath Queries.

Você também pode vincular a uma XElement ou XDocument, ou ligar os resultados de consultas executadas em objetos desses tipos usando LINQ to XML. Uma maneira conveniente de usar o LINQ to XML para acessar os dados XML que é a origem da ligação na marcação é usar um ObjectDataProvider objeto. For more information, see Como: Vincular XDocument, XElement ou LINQ para XML resultados de consulta.

DependencyObject objects

You can bind to dependency properties of any DependencyObject. For an example, see Como: Bind the Properties of Two Controls.

A implementação de uma classe para a origem da ligação

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

Providing Change Notifications

Se você estiver usando um OneWay ou TwoWay vinculação (porque você deseja que seu UI para atualizar quando as propriedades de fonte de ligação alteram dinamicamente), você deve implementar um mecanismo de notificação adequada propriedade alterada. O mecanismo recomendado é para o CLR ou uma classe dinâmica para implementar a INotifyPropertyChanged interface. For more information, see Como: Implement Property Change Notification.

Se você criar um CLR objeto que não implementa INotifyPropertyChanged, em seguida, você deve organizar seu próprio sistema de notificação certificar-se de que os dados usados em uma ligação permaneçam atual. You can provide change notifications by supporting the PropertyChanged pattern for each property that you want change notifications for. Para oferecer suporte a esse padrão, você define uma PropertyNameo evento Changed para cada propriedade, onde PropertyName é o nome da propriedade. You raise the event every time the property changes.

Se a origem da ligação implementa um desses mecanismos de notificação, destino atualizações ocorrem automaticamente. Se por algum motivo, a origem da ligação não fornece a propriedade adequada alterado notificações, você tem a opção de usar o UpdateTarget método para atualizar a propriedade target explicitamente.

Other Characteristics

The following list provides other important points to note:

  • If you want to create the object in XAML, the class must have a default constructor. In some .NET languages, such as C#, the default constructor might be created for you.

  • As propriedades que você usar como propriedades de fonte para uma ligação de ligação deve ser propriedades públicas da sua classe. Propriedades da interface explicitamente definida não podem ser acessadas para fins de vinculação, nem pode propriedades protegidas, privadas, internas ou virtuais que não têm base implementação.

  • Você não pode vincular campos públicos.

  • The type of the property declared in your class is the type that is passed to the binding. No entanto, o tipo, por fim, usado pela ligação depende do tipo do o destino de ligação propriedade, não de propriedade de origem da ligação. If there is a difference in type, you might want to write a converter to handle how your custom property is initially passed to the binding. For more information, see IValueConverter.

Usando objetos de inteiro como uma fonte de ligação

Você pode usar um objeto inteiro como uma fonte de ligação. Você pode especificar uma fonte de ligação usando o Source ou DataContext propriedade e forneça uma declaração de ligação em branco: {Binding}. Scenarios in which this is useful include binding to objects that are of type string, binding to objects with multiple properties you are interested in, or binding to collection objects. For an example of binding to an entire collection object, see Como: Use the Master-Detail Pattern with Hierarchical Data.

Note that you may need to apply custom logic so that the data is meaningful to your bound target property. The custom logic may be in the form of a custom converter (if default type conversion does not exist) or a DataTemplate. Para obter mais informações sobre conversores, consulte a seção de conversão de dados de Revisão de Associação de Dados. For more information about data templates, see Visão geral sobre Templating de dados.

Usando a coleção de objetos como uma fonte de ligação

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

You can enumerate over any collection that implements the IEnumerable interface. However, to set up dynamic bindings so that insertions or deletions in the collection update the UI automatically, the collection must implement the INotifyCollectionChanged interface. This interface exposes an event that must be raised whenever the underlying collection changes.

O ObservableCollection<T> classe é uma implementação interna de uma coleção de dados que expõe a INotifyCollectionChanged interface. The individual data objects within the collection must satisfy the requirements described in the preceding sections. For an example, see Como: Create and Bind to an ObservableCollection. Before implementing your own collection, consider using ObservableCollection<T> or one of the existing collection classes, such as List<T>, Collection<T>, and BindingList<T>, among many others.

WPF nunca liga diretamente a uma coleção. Se você especificar uma coleção como uma fonte de ligação, o WPF realmente liga para o modo de exibição da coleção padrão. Para obter informações sobre modos de exibição padrão, consulte Revisão de Associação de Dados.

Se você tiver um cenário avançado e quiser implementar sua própria coleção, considere o uso de IList interface. IListFornece uma coleção não genéricas de objetos que podem ser acessados individualmente por índice, o que pode melhorar o desempenho.

Requisitos de permissão de ligação de dados

Quando vinculação de dados, você deve considerar o nível de confiança do aplicativo. The following table summarizes what property types can be bound to in an application that is executing in either full trust or partial trust:

Property type

(all access modifiers)

Propriedade de objeto dinâmico

Propriedade de objeto dinâmico

Propriedade CLR

Propriedade CLR

Dependency property

Dependency property

Trust level

Full trust

Partial trust

Full trust

Partial trust

Full trust

Partial trust

Public class

Yes

Yes

Yes

Yes

Yes

Yes

Classe de não-públicos.

Yes

No

Yes

No

Yes

Yes

This table describes the following important points about permission requirements in data binding:

  • Para CLR Propriedades, ligação funciona como o mecanismo de ligação é capaz de acessar a propriedade de origem de ligação de dados usando reflexão. Otherwise, the binding engine issues a warning that the property cannot be found and uses the fallback value or the default value, if it is available.

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

  • You can always bind to dependency properties.

O requisito de permissão para vinculação deXML é semelhante. Em uma proteção de confiança parcial, XmlDataProvider falha quando ele não tem permissões de acesso a dados especificada.

Objetos com um tipo anônimo são internos. Você pode vincular às propriedades de tipos anônimos somente quando executado em confiança total. Para obter mais informações sobre tipos anônimos, consulte Tipos anônimos (guia de programação TRANSLATION FROM VPE FOR CSHARP) ou Tipos anônimos (Visual Basic) (Visual Basic).

For more information about partial-trust security, see WPF Partial Trust Security.

Consulte também

Tarefas

Como: Especificar a Fonte de Associação

Referência

ObjectDataProvider

XmlDataProvider

Conceitos

Revisão de Associação de Dados

WPF Data Binding with LINQ to XML Overview

Otimização de desempenho: Ligação de Dados

Outros recursos

Data Binding How-to Topics