Cenni preliminari sulle origini di associazione
Aggiornamento: novembre 2007
Nell'associazione dati, l'oggetto origine di associazione (origine) fa riferimento all'oggetto da cui si ottengono i dati. In questo argomento vengono descritti i tipi di oggetti che è possibile utilizzare come origine.
Nel presente argomento sono contenute le seguenti sezioni.
- Origine di un'associazione
- Utilizzo di una classe CLR come oggetto di origine di associazione
- Oggetti interi utilizzati come origine di associazione
- Oggetti Collection utilizzati come origine di associazione
- Requisiti di autorizzazione
- Argomenti correlati
Origine di un'associazione
L'associazione dati Windows Presentation Foundation (WPF) supporta i seguenti tipi di origine di associazione:
Origine di associazione |
Descrizione |
---|---|
Oggetti Common Language Runtime (CLR). |
È possibile stabilire l'associazione a proprietà pubbliche, proprietà secondarie, nonché indicizzatori di qualsiasi oggetto Common Language Runtime (CLR). La riflessione CLR viene utilizzata dal motore di associazione per ottenere i valori delle proprietà. In alternativa, anche gli oggetti che implementano ICustomTypeDescriptor o dispongono di un oggetto TypeDescriptionProvider registrato funzionano con il motore di associazione. Per ulteriori informazioni sull'implementazione di una classe che può fungere da oggetto di origine, vedere la sezione successiva. |
Dati ADO.NET. |
È possibile stabilire l'associazione a oggetti ADO.NET, ad esempio DataTable. DataViewADO.NET implementa IBindingList, che fornisce le notifiche delle modifiche per le quali è in ascolto il motore di associazione. Per un esempio, vedere Esempio di associazione a un DataSet ADO.NET. |
Dati XML |
È possibile stabilire l'associazione a XmlNode, XmlDocument o XmlElement ed eseguirvi query XPath. Un modo pratico per accedere a dati XML che rappresentano l'origine di associazione nel markup consiste nell'utilizzare un oggetto XmlDataProvider. Per ulteriori informazioni, vedere Procedura: eseguire l'associazione a dati XML tramite un oggetto XMLDataProvider e query XPath. È inoltre possibile eseguire l'associazione a un oggetto XElement o XDocument oppure eseguire l'associazione ai risultati delle query eseguite su oggetti di questi tipi mediante LINQ to XML. Un modo pratico per accedere ai dati XML che rappresentano l'origine di associazione nel markup consiste nell'utilizzare un oggetto ObjectDataProvider. Per ulteriori informazioni, vedere la classe Procedura: eseguire l'associazione ai risultati di una query XDocument, XElement o LINQ to XML. |
È possibile stabilire l'associazione alle proprietà di dipendenza di qualsiasi oggetto DependencyObject. Per un esempio, vedere Procedura: eseguire l'associazione delle proprietà di due controlli. |
Utilizzo di una classe CLR come oggetto di origine di associazione
In questa sezione vengono illustrati i concetti necessari per l'implementazione di una classe CLR da utilizzare come oggetto di origine.
Invio di notifiche delle modifiche
Se si utilizza l'associazione OneWay o TwoWay (per aggiornare l'interfaccia utente quando le proprietà di origine vengono modificate in modo dinamico), è necessario implementare un meccanismo di notifica adeguato per le proprietà modificate. Il meccanismo consigliato consiste nell'implementare l'interfaccia INotifyPropertyChanged tramite la classe CLR. Per informazioni dettagliate, vedere Procedura: implementare notifiche di modifiche alle proprietà.
Se non si implementa INotifyPropertyChanged, è necessario configurare un sistema di notifica personalizzato in modo da assicurare che i dati utilizzati in un'associazione siano mantenuti aggiornati. È possibile fornire notifiche delle modifiche tramite il supporto del modello PropertyChanged per ogni proprietà per la quale si desidera impostare tali notifiche. Per supportare questo modello, definire un evento NomeProprietàChanged per ogni proprietà, dove NomeProprietà è il nome della proprietà. L'evento viene generato a ogni modifica della proprietà.
Se l'oggetto di origine implementa un meccanismo di notifica adeguato, gli aggiornamenti della destinazione vengono eseguiti automaticamente. Se per un motivo qualsiasi l'oggetto di origine non fornisce notifiche corrette delle modifiche delle proprietà, è possibile utilizzare il metodo UpdateTarget per aggiornare in modo esplicito la proprietà di destinazione.
Altre caratteristiche
Nell'elenco seguente vengono illustrati altri punti importanti:
Se si desidera creare l'oggetto in XAML, la classe deve disporre di un costruttore predefinito. In alcuni linguaggi .NET, ad esempio C#, è possibile che il costruttore predefinito venga creato automaticamente.
È necessario che le proprietà utilizzate come proprietà di origine per un'associazione siano proprietà pubbliche della classe. Non è possibile accedere alle proprietà dell'interfaccia definite in modo esplicito a scopo di associazione, né alle proprietà protette, private o virtuali prive di implementazione di base.
Non è possibile stabilire l'associazione ai campi pubblici di una classe CLR.
Il tipo della proprietà dichiarata nella classe è il tipo passato all'associazione. Tuttavia, il tipo utilizzato in ultima analisi dall'associazione dipende dal tipo della proprietà della destinazione di associazione, non della proprietà di origine. Se è presente una differenza nel tipo, è necessario scrivere un convertitore per gestire la modalità di passaggio iniziale della proprietà personalizzata all'associazione. Per ulteriori informazioni, vedere IValueConverter.
Oggetti interi utilizzati come origine di associazione
È possibile utilizzare un oggetto intero come origine per un'associazione. A tale scopo, specificare l'oggetto come origine di associazione utilizzando la proprietà Source o DataContext e non fornire alcun percorso, tranne una dichiarazione di associazione vuota: {Binding}. Tra gli scenari per i quali questa possibilità si rivela utile vi sono l'associazione a oggetti di tipo stringa, l'associazione a oggetti con più proprietà di interesse o l'associazione a oggetti Collection. Per un esempio di associazione a un intero oggetto Collection, vedere Procedura: utilizzare il modello Master-Details con dati gerarchici.
Si noti che può essere necessario applicare logica personalizzata affinché i dati siano significativi per la proprietà di destinazione associata. La logica personalizzata può avere il formato di convertitore personalizzato (se la conversione di tipo predefinita non esiste) o di DataTemplate. Per ulteriori informazioni sui convertitori, vedere la sezione Conversione di dati in Cenni preliminari sull'associazione dati. Per ulteriori informazioni sui modelli di dati, vedere Cenni preliminari sui modelli di dati.
Oggetti Collection utilizzati come origine di associazione
Spesso, l'oggetto che si desidera utilizzare come origine è un insieme di più oggetti personalizzati, ciascuno dei quali rappresenta un oggetto dati che funge da origine per un'istanza di un'associazione ripetuta. Ad esempio, è possibile disporre di un insieme CustomerOrders di oggetti CustomerOrder, nel quale l'applicazione scorre per determinare il numero di ordini e i dati che contengono.
È possibile eseguire enumerazioni in qualsiasi insieme che implementa l'interfaccia IEnumerable. Per impostare associazioni dinamiche affinché l'interfaccia utente venga automaticamente aggiornata in seguito a operazioni di inserimento o eliminazione nell'insieme, tuttavia, è necessario che l'insieme implementi l'interfaccia INotifyCollectionChanged. Questa interfaccia espone un evento che deve essere generato a ogni modifica dell'insieme sottostante.
In WPF viene fornita la classe ObservableCollection<T>, un'implementazione incorporata di un insieme di dati che espone l'interfaccia INotifyCollectionChanged. I singoli oggetti dati nell'insieme devono soddisfare i requisiti descritti nelle sezioni precedenti. Per un esempio, vedere Procedura: creare ed eseguire l'associazione a una classe ObservableCollection. Prima di implementare un insieme personalizzato, considerare la possibilità di utilizzare ObservableCollection<T> o una delle classi di insiemi esistenti, ad esempio List<T>, Collection<T> e BindingList<T>.
WPF non esegue mai direttamente l'associazione a un insieme. Se si specifica un insieme come origine dati, WPF esegue effettivamente l'associazione alla visualizzazione predefinita dell'insieme. Per informazioni sulle visualizzazioni predefinite, vedere Cenni preliminari sull'associazione dati.
Se si desidera implementare un insieme personalizzato in uno scenario avanzato, è opportuno utilizzare IList, che fornisce un insieme non generico di oggetti ai quali è possibile accedere singolarmente in base all'indice e garantisce prestazioni ottimali.
Requisiti di autorizzazione
Nella tabella seguente vengono riepilogati i tipi di proprietà ai quali è possibile stabilire l'associazione in un'applicazione eseguita con attendibilità totale o attendibilità parziale:
Tipo proprietà (tutti i modificatori di accesso) |
Proprietà CLR |
Proprietà CLR |
Proprietà di dipendenza |
Dipendenza proprietà |
---|---|---|---|---|
Livello di attendibilità |
Attendibilità totale |
Attendibilità parziale |
Attendibilità totale |
Attendibilità parziale |
Classe pubblica |
Sì |
Sì |
Sì |
Sì |
Classe privata |
Sì |
No |
Sì |
Sì |
In questa tabella vengono illustrati punti importanti relativi ai requisiti di autorizzazione per l'associazione dati:
Per le proprietà CLR, l'associazione dati funziona purché il motore di associazione sia in grado di accedere alla proprietà di origine utilizzando la riflessione. In caso contrario, viene generato un avviso relativo all'impossibilità di trovare la proprietà e viene utilizzato il valore di fallback o quello predefinito, se disponibile.
È sempre possibile stabilire l'associazione alle proprietà di dipendenza.
Il requisito di autorizzazione per l'associazione XML è simile: in un sandbox con attendibilità parziale, si verifica una condizione di errore se XmlDataProvider non dispone delle autorizzazioni per accedere ai dati specificati.
Per ulteriori informazioni sulla sicurezza dell'attendibilità parziale, vedere Sicurezza con attendibilità parziale di Windows Presentation Foundation.
Vedere anche
Attività
Procedura: specificare l'origine di associazione
Concetti
Cenni preliminari sull'associazione dati
Cenni preliminari sull'associazione dati WPF con LINQ to XML
Ottimizzazione delle prestazioni: associazione dati