Cenni preliminari sull'associazione dati WPF con LINQ to XML
In questo argomento vengono brevemente descritte le funzionalità dinamiche di associazione dati dello spazio dei nomi System.Xml.Linq. Queste funzionalità possono essere utilizzate come origine dati per gli elementi dell'interfaccia utente in WPF (Windows Presentation Foundation).
XAML e LINQ to XML
XAML (Extensible Application Markup Language) è un sottolinguaggio XML creato da Microsoft per supportare le tecnologie .NET Framework 3.0. Viene utilizzato in WPF per rappresentare elementi dell'interfaccia utente e funzionalità correlate, ad esempio eventi e associazione dati. In Windows Workflow Foundation XAML viene utilizzato per rappresentare la struttura del programma, ad esempio il controllo del programma (flussi di lavoro). XAML consente la separazione di aspetti dichiarativi di una tecnologia dal codice procedurale correlato che definisce il comportamento più personalizzato di un programma.
XAML e LINQ to XML possono interagire in due modi:
Poiché i file XAML corrispondono a codice XML ben formato, è possibile eseguirvi query e modificarli tramite tecnologie XML quale LINQ to XML.
Poiché le query LINQ to XML rappresentano un'origine dati, possono essere utilizzate come origine dati per l'associazione dati per gli elementi dell'interfaccia utente WPF.
In questa documentazione viene descritto il secondo scenario.
Associazione dati in Windows Presentation Foundation
L'associazione dati WPF consente a un elemento dell'interfaccia utente di associare una delle proprietà a un'origine dati. Un semplice esempio di questo comportamento è Label il cui testo presenta il valore di una proprietà pubblica in un oggetto definito dall'utente. L'associazione dati WPF si basa sui componenti seguenti:
Componente |
Descrizione |
---|---|
Destinazione di associazione |
Elemento dell'interfaccia utente da associare all'origine dati. Gli elementi visivi di WPF sono derivati dalla classe UIElement. |
Proprietà di destinazione |
Proprietà di dipendenza della destinazione di associazione che riflette il valore dell'origine con associazione a dati. Le proprietà della dipendenza sono supportate direttamente dalla classe DependencyObject, da cui deriva UIElement |
Origine di associazione |
Oggetto di origine per uno o più valori forniti all'elemento dell'interfaccia utente per la presentazione. In WPF sono automaticamente supportati i seguenti tipi di origini di associazione: oggetti CLR, oggetti dati ADO.NET, dati XML (provenienti da query XPath o LINQ to XML) o un altro oggetto DependencyObject. |
Percorso di origine |
Proprietà dell'origine di associazione che si risolve nel valore o set di valori a cui deve essere associata. |
Quello della proprietà della dipendenza è un concetto specifico di WPF che rappresenta una proprietà di un elemento dell'interfaccia utente elaborato dinamicamente. Ad esempio, le proprietà di dipendenza includono spesso valori predefiniti o specificati da un elemento padre. Queste proprietà speciali sono supportate da istanze della classe DependencyProperty e non da campi come con proprietà standard. Per ulteriori informazioni, vedere Dependency Properties Overview.
Associazione dati dinamica in WPF
Per impostazione predefinita, l'associazione dati si verifica solo quando viene inizializzato l'elemento dell'interfaccia utente di destinazione. Questo comportamento è denominato associazione unica. Nella maggior parte dei casi, si tratta di una soluzione insufficiente. In genere una soluzione di associazione dati richiede la propagazione dinamica delle modifiche in fase di esecuzione in una delle seguenti modalità:
L'associazione unidirezionale provoca la propagazione automatica delle modifiche apportate a un lato. In generale, le modifiche apportate all'origine si riflettono nella destinazione, ma può essere utile anche l'inverso.
Nell'associazione bidirezionale le modifiche apportate all'origine vengono automaticamente propagate alla destinazione e viceversa.
Affinché si verifichi l'associazione unidirezionale o bidirezionale, è necessario che l'origine implementi un meccanismo di notifica delle modifiche, ad esempio tramite l'implementazione dell'interfaccia INotifyPropertyChanged o l'utilizzo di un modello PropertyNameChanged per ogni proprietà supportata.
Per ulteriori informazioni sull'associazioni dati in WPF, vedere Associazione dati.
Proprietà dinamiche nelle classi LINQ to XML
La maggior parte delle classi LINQ to XML non è qualificata come origine dati dinamica WPF appropriata. Alcune delle informazioni più utili sono disponibili solo tramite metodi, non tramite proprietà, e le proprietà di queste classi non implementano le notifiche delle modifiche. Per supportare l'associazione dati WPF, in LINQ to XML viene esposto un set 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 state aggiunte a queste classi unicamente per consentirne l'utilizzo come origini dati dinamiche per WPF. Per soddisfare questa esigenza, tutte queste proprietà dinamiche implementano le notifiche delle modifiche. Un riferimento dettagliato per queste proprietà dinamiche è presentato nella sezione successiva, Proprietà dinamiche di LINQ to XML.
Nota
Molte delle proprietà pubbliche standard, disponibili nelle varie classi nello spazio dei nomi System.Xml.Linq, possono essere utilizzate per l'associazione dati unica. Tenere presente, tuttavia, in questo schema non verrà aggiornata né l'origine né la destinazione.
Accesso alle proprietà dinamiche
Non è possibile accedere alle proprietà dinamiche delle classi XAttribute e XElement come alle proprietà standard. Ad esempio, nei linguaggi conformi a CLR quale C# non è possibile:
Accedere direttamente a queste proprietà in fase di compilazione. Le proprietà dinamiche sono invisibili per il compilatore e per la funzionalità IntelliSense di Visual Studio.
Individuare o accedere a queste proprietà tramite reflection .NET. Anche in fase di esecuzione, non si tratta di proprietà nel senso CLR di base.
In C# è possibile accedere alle proprietà dinamiche solo in fase di esecuzione tramite le funzionalità rese disponibili dallo spazio dei nomi System.ComponentModel.
Al contrario, in un'origine XML è possibile accedere alle proprietà dinamiche tramite una notazione diretta nel seguente formato:
<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 deve essere fornito con un indice per ottenere il valore o la raccolta di valori risultante. Nell'ultimo caso la sintassi ha il seguente formato:
<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 utilizzate con le funzionalità fornite dallo spazio dei nomi System.Windows.Data, in particolare la classe Binding.
Vedere anche
Concetti
Proprietà dinamiche di LINQ to XML