O que são as fontes de ligação? (WPF .NET)
Na vinculação de dados, o objeto de origem da associação refere-se ao objeto do qual você obtém dados. Este artigo discute os tipos de objetos que você pode usar como a fonte de ligação, como objetos .NET CLR, XML e objetos DependencyObject.
Tipos de origem de vinculação
A vinculação de dados do Windows Presentation Foundation (WPF) oferece suporte aos seguintes tipos de fonte de vinculação:
objetos CLR (Common Language Runtime) do .NET
Você pode vincular a propriedades públicas, subpropriedades e indexadores de qualquer objeto CLR (Common Language Runtime). O mecanismo de vinculação usa reflexão CLR para obter os valores das propriedades. Os objetos que implementam ICustomTypeDescriptor ou têm um TypeDescriptionProvider registrado também funcionam com o mecanismo de vinculação.
Para obter mais informações sobre como implementar uma classe que pode servir como uma fonte de ligação, consulte Implementando uma fonte de associação em seus objetos mais adiante neste artigo.
Objetos dinâmicos
Você pode vincular a propriedades e indexadores disponíveis de um objeto que implementa a interface IDynamicMetaObjectProvider. Se podes aceder ao membro no código, podes ligar-te a ele. Por exemplo, se um objeto dinâmico permitir que você acesse um membro no código via
SomeObject.AProperty
, você poderá vincular a ele definindo o caminho de associação comoAProperty
.ADO.NET objetos
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 vinculação escuta.
objetos XML
Você pode vincular e executar consultas
XPath
em um XmlNode, XmlDocumentou XmlElement. Uma maneira conveniente de acessar dados XML que são a fonte de ligação na marcação é usar um objeto XmlDataProvider. Para obter mais informações, consulte Vincule a dados XML usando um XMLDataProvider e consultas XPath (.NET Framework).Você também pode vincular a um XElement ou XDocumentou vincular 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 são a fonte de ligação na marcação é usar um objeto ObjectDataProvider. Para obter mais informações, consulte Bind to XDocument, XElement ou LINQ for XML Query Results (.NET Framework).
DependencyObject objetos
Você pode vincular a propriedades de dependência de qualquer DependencyObject. Para obter um exemplo, consulte Bind the Properties of Two Controls (.NET Framework).
Implementar uma fonte de vinculação em seus objetos
Seus objetos CLR podem se tornar fontes de ligação. Há algumas coisas a serem observadas ao implementar uma classe para servir como uma fonte de vinculação.
Fornecer notificações de alteração
Se estiveres a usar uma vinculação OneWay ou TwoWay, implementa um mecanismo de notificação de "propriedade alterada" adequado. O mecanismo recomendado é que o CLR ou a classe dinâmica implemente a interface INotifyPropertyChanged. Para obter mais informações, consulte Como implementar notificação de alteração de propriedade (.NET Framework).
Há duas maneiras de notificar um assinante de uma alteração de propriedade:
Implemente a interface INotifyPropertyChanged.
Este é o mecanismo recomendado para notificações. O INotifyPropertyChanged fornece o evento PropertyChanged, que o sistema de ligação respeita. Ao gerar esse evento e fornecer o nome da propriedade que foi alterada, você notificará um destino de vinculação da alteração.
Implemente o padrão
PropertyChanged
.Cada propriedade que precisa notificar um destino de vinculação sobre uma alteração tem um evento correspondente
PropertyNameChanged
, ondePropertyName
é o nome da propriedade. Você gera o evento toda vez que a propriedade é alterada.
Se sua fonte de vinculação implementar um desses mecanismos de notificação, as atualizações de destino acontecerão automaticamente. Se, por qualquer motivo, sua fonte de vinculação não fornecer as notificações de alteração de propriedade apropriadas, você poderá usar o método UpdateTarget para atualizar a propriedade de destino explicitamente.
Outras características
A lista a seguir fornece outros pontos importantes a serem observados:
Os objetos de dados que servem como fontes de ligaçã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 da associação.
As propriedades que você usa como propriedades de origem de vinculação devem ser propriedades públicas de sua classe. As propriedades de interface explicitamente definidas não podem ser acessadas para fins de vinculação, nem as propriedades protegidas, privadas, internas ou virtuais que não tenham implementação base.
Não é possível vincular a campos públicos.
O tipo da propriedade declarada na sua classe é o tipo que é passado para a ligação. No entanto, o tipo usado pela vinculação depende do tipo da propriedade de destino de ligação, não da propriedade de origem da ligação. Se houver uma diferença no tipo, convém 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 fonte de ligação
Você pode usar um objeto inteiro como uma fonte de ligação. Especifique uma fonte de vinculação usando a propriedade Source ou DataContext e forneça uma declaração de vinculação em branco: {Binding}
. Os cenários em que isso é útil incluem a vinculação a objetos do tipo string, a associação a objetos com várias propriedades nas quais você está interessado ou a vinculação a objetos de coleção. Para obter um exemplo de associação a um objeto de coleção inteiro, consulte Como usar o padrão de Master-Detail com dados hierárquicos (.NET Framework).
Talvez seja necessário aplicar lógica personalizada para que os dados sejam significativos para sua propriedade de destino vinculada. 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 Data Templating Overview (.NET Framework).
Objetos de coleção como uma fonte de ligação
Muitas vezes, o objeto que você deseja usar como fonte de associação é uma coleção de objetos personalizados. Cada objeto serve como fonte para uma instância de uma associação repetida. Por exemplo, você pode ter uma coleção CustomerOrders
que consiste em objetos CustomerOrder
, onde seu aplicativo itera sobre a coleção para determinar quantas ordens existem e os dados contidos em cada ordem.
Você pode enumerar sobre qualquer coleção que implementa 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 for 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 satisfazer os requisitos descritos nas seções anteriores. Para obter um exemplo, consulte Como criar e vincular 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 fonte de vinculação, o WPF não se vincula diretamente à coleção. Em vez disso, o WPF realmente se liga à exibição padrão da coleção. Para obter informações sobre modos de exibição 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 vinculação de dados
Ao contrário do .NET Framework, o .NET é executado com segurança de confiança total. Toda a vinculação de dados é executada com o mesmo acesso que o usuário que executa o aplicativo.
Ver também
.NET Desktop feedback