Condividi tramite


Panoramica del data binding WPF con LINQ to XML

Questo articolo presenta le funzionalità di data binding dinamico nello spazio dei nomi System.Xml.Linq. Queste funzionalità possono essere usate come origine dati per gli elementi dell'interfaccia utente nelle app Windows Presentation Foundation (WPF). Questo scenario si basa su proprietà dinamiche speciali di System.Xml.Linq.XAttribute e System.Xml.Linq.XElement.

XAML e LINQ to XML

Extensible Application Markup Language (XAML) è un dialetto XML creato da Microsoft per supportare le tecnologie .NET. Viene usato in WPF per rappresentare elementi dell'interfaccia utente e funzionalità correlate, ad esempio eventi e data binding. In Windows Workflow Foundation XAML viene usato per rappresentare la struttura del programma, ad esempio il controllo del programma (flussi di lavoro). XAML consente di separare gli aspetti dichiarativi di una tecnologia dal codice procedurale correlato che definisce il comportamento più individuale di un programma.

Esistono due modi generali in cui XAML e LINQ to XML possono interagire:

  • Poiché i file XAML sono xml ben formati, possono essere sottoposti a query e manipolati tramite tecnologie XML come LINQ to XML.

  • Poiché le query LINQ to XML rappresentano un'origine di dati, queste query possono essere usate come origine dati per l'associazione dati per gli elementi dell'interfaccia utente WPF.

Questa documentazione descrive il secondo scenario.

Associazione dati in Windows Presentation Foundation

Il data binding WPF consente a un elemento dell'interfaccia utente di associare una delle relative proprietà a un'origine dati. Un semplice esempio di questo è un Label il cui testo presenta il valore di una proprietà pubblica in un oggetto definito dall'utente. Il data binding WPF si basa sui componenti seguenti:

Componente Descrizione
Obiettivo di assegnazione Elemento dell'interfaccia utente da associare all'origine dati. Gli elementi visivi in WPF derivano dalla classe UIElement.
Proprietà di destinazione La proprietà di dipendenza della destinazione di associazione che riflette il valore dell'origine del data binding. Le proprietà di dipendenza sono direttamente supportate dalla classe DependencyObject, da cui deriva UIElement.
Fonte di associazione Oggetto di origine per uno o più valori forniti all'elemento dell'interfaccia utente per la presentazione. WPF supporta automaticamente i tipi seguenti come origini di associazione: oggetti CLR, oggetti dati ADO.NET, dati XML (da query XPath o LINQ to XML) o un altro DependencyObject.
Percorso di origine Proprietà dell'origine di associazione che viene risolta nel valore o nel set di valori da associare.

Una proprietà di dipendenza è un concetto specifico di WPF che rappresenta una proprietà calcolata dinamicamente di un elemento dell'interfaccia utente. Ad esempio, le proprietà di dipendenza hanno spesso valori predefiniti o valori forniti da un elemento padre. Queste proprietà speciali sono supportate da istanze della classe DependencyProperty (e non dai campi come con le proprietà standard). Per altre informazioni, vedere Panoramica delle proprietà delle dipendenze .

Binding dinamico dei dati in WPF

Per impostazione predefinita, il data binding si verifica solo quando viene inizializzato l'elemento dell'interfaccia utente di destinazione. Questa operazione viene chiamata binding una tantum. Per la maggior parte dei casi, questo non è sufficiente; in genere, una soluzione di data binding richiede che le modifiche vengano propagate dinamicamente in fase di esecuzione usando uno dei seguenti elementi:

  • Il binding unidirezionale fa sì che le modifiche apportate a una parte vengano propagate automaticamente. In genere, le modifiche apportate all'origine vengono riflesse nella destinazione, ma il contrario può talvolta risultare utile.

  • In binding bidirezionale, le modifiche apportate all'origine vengono propagate automaticamente alla destinazione e le modifiche apportate alla destinazione vengono propagate automaticamente all'origine.

Affinché si verifichi un'associazione unidirezionale o bidirezionale, l'origine deve implementare un meccanismo di notifica delle modifiche, ad esempio implementando l'interfaccia INotifyPropertyChanged o usando un modello PropertyNameChanged per ogni proprietà supportata.

Per altre informazioni sul data binding in WPF, vedere Data Binding (WPF).

Proprietà dinamiche nelle classi LINQ to XML

La maggior parte delle classi LINQ to XML non è idonea come adeguate origini dati dinamiche per WPF. Alcune delle informazioni più utili sono disponibili solo tramite metodi, non proprietà e proprietà in queste classi non implementano notifiche di modifica. Per supportare il data binding di WPF, LINQ to XML espone un insieme di proprietà dinamiche .

Queste proprietà dinamiche sono proprietà speciali di runtime che duplicano la funzionalità dei metodi e delle proprietà esistenti nelle classi XAttribute e XElement. Sono stati aggiunti a queste classi esclusivamente per consentire loro di agire come origini dati dinamiche per WPF. Per soddisfare questa esigenza, tutte queste proprietà dinamiche implementano le notifiche di modifica. Nella sezione successiva viene fornito un riferimento dettagliato per queste proprietà dinamiche, LINQ to XML Dynamic Properties.

Nota

Molte delle proprietà pubbliche standard, disponibili nelle varie classi nel namespace System.Xml.Linq, possono essere usate per il binding dei dati una tantum. Tenere tuttavia presente che né l'origine né la destinazione verranno aggiornate dinamicamente in questo schema.

Accedere alle proprietà dinamiche

Non è possibile accedere alle proprietà dinamiche nelle classi XAttribute e XElement come le proprietà standard. Ad esempio, nei linguaggi conformi a CLR, ad esempio C#, non possono essere:

  • Accesso diretto in fase di compilazione. Le proprietà dinamiche sono invisibili al compilatore e a Visual Studio IntelliSense.

  • Individuato o a cui si accede in fase di esecuzione usando la reflection di .NET. Anche al tempo di esecuzione, non sono proprietà nel senso CLR di base.

In C# è possibile accedere alle proprietà dinamiche solo in fase di esecuzione tramite le funzionalità fornite dallo spazio dei nomi System.ComponentModel.

Al contrario, è possibile accedere alle proprietà dinamiche di un'origine XML tramite una semplice notazione nel formato seguente:

<object>.<dynamic-property>

Le proprietà dinamiche per queste due classi si risolvono in un valore che può essere utilizzato direttamente o in un indicizzatore che richiede un indice per ottenere il valore o la raccolta di valori risultanti. La seconda sintassi assume la forma:

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

Per ulteriori informazioni, vedere Proprietà Dinamiche di LINQ to XML.

Per implementare l'associazione dinamica WPF, le proprietà dinamiche verranno usate con le funzionalità fornite dallo spazio dei nomi System.Windows.Data, in particolare la classe Binding.

Vedere anche