Partilhar via


Visão geral da vinculação de dados do WPF com LINQ to XML

Este artigo apresenta os recursos de associação de dados dinâmicos no namespace System.Xml.Linq. Esses recursos podem ser usados como uma fonte de dados para elementos da interface do usuário (UI) em aplicativos do Windows Presentation Foundation (WPF). Este cenário depende de propriedades especiais dinâmicas de System.Xml.Linq.XAttribute e System.Xml.Linq.XElement.

XAML e LINQ to XML

O Extensible Application Markup Language (XAML) é um dialeto XML criado pela Microsoft para oferecer suporte a tecnologias .NET. Ele é usado no WPF para representar elementos da interface do usuário e recursos relacionados, como eventos e vinculação de dados. No Windows Workflow Foundation, o XAML é usado para representar a estrutura do programa, como controle de programa (fluxos de trabalho). O XAML permite que os aspetos declarativos de uma tecnologia sejam separados do código de procedimento relacionado que define o comportamento mais individualizado de um programa.

Há duas maneiras amplas pelas quais XAML e LINQ to XML podem interagir:

  • Como os arquivos XAML são XML bem formados, eles podem ser consultados e manipulados por meio de tecnologias XML, como LINQ to XML.

  • Como as consultas LINQ to XML representam uma fonte de dados, essas consultas podem ser usadas como uma fonte de dados para vinculação de dados para elementos da interface do usuário do WPF.

Esta documentação descreve o segundo cenário.

Vinculação de dados no Windows Presentation Foundation

A vinculação de dados do WPF permite que um elemento da interface do usuário associe uma de suas propriedades a uma fonte de dados. Um exemplo simples disso é um Label cujo texto apresenta o valor de uma propriedade pública em um objeto definido pelo usuário. A vinculação de dados do WPF depende dos seguintes componentes:

Componente Descrição
Meta vinculativa O elemento da interface do usuário a ser associado à fonte de dados. Os elementos visuais no WPF são derivados da classe UIElement.
Propriedade de destino A propriedade de dependência do alvo de ligação que reflete o valor da origem de ligação de dados. As propriedades de dependência são suportadas diretamente pela classe DependencyObject, da qual UIElement deriva.
Fonte de ligação O objeto de origem para um ou mais valores fornecidos ao elemento da interface do usuário para apresentação. WPF suporta automaticamente os seguintes tipos como fontes de ligação: objetos CLR, objetos de dados ADO.NET, dados XML (de consultas XPath ou LINQ para XML) ou outro DependencyObject.
Caminho de origem A propriedade da fonte de dados que determina o valor ou conjunto de valores a ser vinculada.

Uma propriedade de dependência é um conceito específico do WPF que representa uma propriedade calculada dinamicamente de um elemento da interface do usuário. Por exemplo, as propriedades de dependência geralmente têm valores padrão ou valores fornecidos por um elemento pai. Essas propriedades especiais são apoiadas por instâncias da classe DependencyProperty (e não campos como com propriedades padrão). Para mais informações, consulte Visão geral das propriedades de dependência.

Vinculação de dados dinâmicos no WPF

Por padrão, a vinculação de dados ocorre somente quando o elemento da interface do usuário de destino é inicializado. Isso é chamado vinculação única. Para a maioria dos fins, isso é insuficiente; Normalmente, uma solução de vinculação de dados requer que as alterações sejam propagadas dinamicamente em tempo de execução usando um dos seguintes:

  • Vinculação unidirecional faz com que as alterações de um lado sejam propagadas automaticamente. Mais comumente, as alterações na fonte são refletidas no destino, mas o inverso às vezes pode ser útil.

  • Em ligação de bidirecional, as alterações na origem são propagadas automaticamente para o destino e as alterações no destino são propagadas automaticamente para a origem.

Para que ocorra uma ligação unidirecional ou bidirecional, a origem deve implementar um mecanismo de notificação de alteração, por exemplo, implementando a interface ou usando um padrão de PropertyNameChanged para cada propriedade suportada.

Para obter mais informações sobre vinculação de dados no WPF, consulte Data Binding (WPF).

Propriedades dinâmicas em classes LINQ to XML

A maioria das classes LINQ to XML não se qualifica como fontes de dados dinâmicas WPF adequadas. Algumas das informações mais úteis estão disponíveis apenas por meio de métodos, não propriedades, e as propriedades nessas classes não implementam notificações de alteração. Para dar suporte à vinculação de dados WPF, o LINQ to XML expõe um conjunto de propriedades dinâmicas.

Essas propriedades dinâmicas são propriedades especiais de tempo de execução que duplicam a funcionalidade de métodos e propriedades existentes nas classes XAttribute e XElement. Eles foram adicionados a essas classes apenas para permitir que atuassem como fontes de dados dinâmicas para o WPF. Para atender a essa necessidade, todas essas propriedades dinâmicas implementam notificações de alteração. Uma referência detalhada para essas propriedades dinâmicas é fornecida na próxima seção, LINQ to XML Dynamic Properties.

Observação

Muitas das propriedades públicas padrão, encontradas nas várias classes no namespace System.Xml.Linq, podem ser usadas para vinculação de dados única. No entanto, lembre-se de que nem a fonte nem o alvo serão atualizados dinamicamente sob este esquema.

Acessar propriedades dinâmicas

As propriedades dinâmicas nas classes XAttribute e XElement não podem ser acessadas como propriedades padrão. Por exemplo, em linguagens compatíveis com CLR, como C#, elas não podem ser:

  • Acessado diretamente em tempo de compilação. As propriedades dinâmicas são invisíveis para o compilador e para o Visual Studio IntelliSense.

  • Descoberto ou acedido em tempo de execução usando .NET reflection. Mesmo durante a execução, eles não são propriedades no sentido básico do CLR.

Em C#, as propriedades dinâmicas só podem ser acessadas em tempo de execução por meio de recursos fornecidos pelo namespace System.ComponentModel.

Em contraste, no entanto, em um código-fonte XML, as propriedades dinâmicas podem ser acessadas por meio de uma notação direta na seguinte forma:

<object>.<dynamic-property>

As propriedades dinâmicas para estas duas classes podem resolver-se para um valor diretamente utilizável ou para um indexador que deve ser fornecido com um índice para obter o valor resultante ou o conjunto de valores. Esta última sintaxe assume a forma:

<object>.<dynamic-property>[<index-value>]

Para obter mais informações, consulte Propriedades Dinâmicas do LINQ to XML.

Para implementar a vinculação dinâmica do WPF, as propriedades dinâmicas serão usadas com recursos fornecidos pelo namespace System.Windows.Data, mais notavelmente a classe Binding.

Ver também