Interfacce correlate al data binding
Con ADO.NET, è possibile creare molte strutture di dati diverse in base alle esigenze di associazione dell'applicazione e ai dati in uso. Si consiglia di creare classi che forniscono o usano dati in Windows Forms. Questi oggetti possono offrire diversi livelli di funzionalità e complessità, dal data binding, all'offerta di supporto in fase di progettazione, al controllo degli errori, alla notifica delle modifiche o anche al supporto per un annullamento strutturato delle modifiche apportate ai dati.
Consumer delle interfacce di data binding
Le sezioni seguenti descrivono due gruppi di oggetti interfaccia. Nel primo gruppo sono elencate le interfacce implementate nell'origine dati dagli autori dell'origine dati. Queste interfacce sono progettate per essere usate dai consumer dell'origine dati, che sono nella maggior parte dei casi dei controlli o componenti di Windows Forms. Nel secondo gruppo sono elencate le interfacce destinate ad essere usate dagli autori di componenti. Gli autori di componenti usano queste interfacce al momento della creazione di un componente che supporta l'uso del data binding da parte del motore del data-binding di Windows Forms. È possibile implementare queste interfacce all'interno delle classi associate al modulo per consentire il data-binding; ogni caso presenta una classe che implementa un'interfaccia che abilita l'interazione con i dati. Gli strumenti di progettazione rapida delle applicazioni (RAD) di Visual Studio sfruttano già questa funzionalità.
Interfacce per l'implementazione da parte degli autori dell'origine dati
Le interfacce seguenti sono progettate per essere usate dai controlli di Windows Forms:
IList Interfaccia
Una classe che implementa l'interfaccia IList può essere un Arrayoggetto , ArrayListo CollectionBase. Questi sono elenchi indicizzati di elementi di tipo Object. Questi elenchi devono contenere tipi omogenei, perché il primo elemento dell'indice determina il tipo. IList sarebbe disponibile per l'associazione solo in fase di esecuzione.
Nota
Se si desidera creare un elenco di oggetti business per l'associazione con Windows Form, è consigliabile usare .BindingList<T> BindingList<T> è una classe estendibile che implementa le interfacce primarie necessarie per il data binding bidirezionale Windows Form.
IBindingList Interfaccia
Una classe che implementa l'interfaccia IBindingList fornisce un livello molto superiore di funzionalità di data binding. Questa implementazione offre funzionalità di ordinamento di base e la notifica delle modifiche, sia quando gli elementi dell'elenco cambiano (ad esempio, il terzo elemento in un elenco di clienti include una modifica al campo indirizzo), sia quando l'elenco stesso cambia (ad esempio, il numero di elementi nell'elenco aumenta o diminuisce). La notifica della modifica è importante se si prevede di disporre di più controlli associati agli stessi dati e si desidera che le modifiche apportate in uno dei controlli si propaghi agli altri controlli associati.
Nota
La notifica delle modifiche è abilitata per l'interfaccia IBindingList tramite la SupportsChangeNotification proprietà che, quando
true
, genera un ListChanged evento, che indica che l'elenco è stato modificato o un elemento nell'elenco è stato modificato.Il tipo di modifica viene descritto dalla ListChangedType proprietà del ListChangedEventArgs parametro . Di conseguenza, ogni volta che viene aggiornato il modello di dati, anche tutte le visualizzazioni dipendenti, ad esempio gli altri controlli associati alla stessa origine dati, verranno aggiornate. Tuttavia, gli oggetti contenuti nell'elenco dovranno notificare all'elenco quando cambiano in modo che l'elenco possa generare l'evento ListChanged .
Nota
BindingList<T> fornisce un'implementazione generica dell'interfaccia IBindingList .
IBindingListView Interfaccia
Una classe che implementa l'interfaccia IBindingListView fornisce tutte le funzionalità di un'implementazione di IBindingList, nonché il filtro e la funzionalità di ordinamento avanzata. Questa implementazione fornisce un filtro basato sulle stringhe, e un ordinamento a più colonne con coppie descrittore-direzione della proprietà.
IEditableObject Interfaccia
Una classe che implementa l'interfaccia IEditableObject consente a un oggetto di controllare quando le modifiche apportate a tale oggetto vengono rese permanenti. Questa implementazione offre i BeginEditmetodi , EndEdite CancelEdit che consentono di eseguire il rollback delle modifiche apportate all'oggetto . Di seguito è riportata una breve spiegazione del funzionamento dei BeginEditmetodi , EndEdite CancelEdit e di come funzionano tra loro per consentire un possibile rollback delle modifiche apportate ai dati:
Il BeginEdit metodo segnala l'inizio di una modifica in un oggetto . Un oggetto che implementa questa interfaccia dovrà archiviare gli aggiornamenti dopo la chiamata al BeginEdit metodo in modo che gli aggiornamenti possano essere eliminati se viene chiamato il CancelEdit metodo . Nel data binding Windows Form è possibile chiamare BeginEdit più volte nell'ambito di una singola transazione di modifica ( ad esempio , BeginEditBeginEdit, EndEdit). Le implementazioni di IEditableObject devono tenere traccia del fatto che BeginEdit sia già stato chiamato e ignorare le chiamate successive a BeginEdit. Poiché questo metodo può essere chiamato più volte, è importante che le chiamate successive a esso non siano distruttive; ovvero, le chiamate successive BeginEdit non possono eliminare definitivamente gli aggiornamenti che sono stati eseguiti o modificare i dati salvati nella prima BeginEdit chiamata.
Il metodo esegue il EndEdit push delle modifiche apportate da quando BeginEdit è stato chiamato nell'oggetto sottostante, se l'oggetto è attualmente in modalità di modifica.
Il CancelEdit metodo elimina tutte le modifiche apportate all'oggetto .
Per altre informazioni sul funzionamento dei BeginEditmetodi , EndEdite CancelEdit , vedere Salvare i dati nel database.
Questa nozione transazionale di funzionalità dei dati viene usata dal DataGridView controllo .
ICancelAddNew Interfaccia
Una classe che implementa l'interfaccia ICancelAddNew implementa in genere l'interfaccia IBindingList e consente di eseguire il rollback di un'aggiunta apportata all'origine dati con il AddNew metodo . Se l'origine dati implementa l'interfaccia IBindingList , è necessario implementare anche l'interfaccia ICancelAddNew .
IDataErrorInfo Interfaccia
Una classe che implementa l'interfaccia IDataErrorInfo consente agli oggetti di offrire informazioni personalizzate sugli errori ai controlli associati:
IEnumerable Interfaccia
Una classe che implementa l'interfaccia IEnumerable viene in genere utilizzata da ASP.NET. Windows Form supporto per questa interfaccia è disponibile solo tramite il BindingSource componente .
Nota
Il BindingSource componente copia tutti gli IEnumerable elementi in un elenco separato a scopo di associazione.
ITypedList Interfaccia
Una classe di raccolte che implementa l'interfaccia ITypedList consente di controllare l'ordine e il set di proprietà esposte al controllo associato.
Nota
Quando si implementa il GetItemProperties metodo e la PropertyDescriptor matrice non è Null, l'ultima voce nella matrice sarà il descrittore di proprietà che descrive la proprietà list che è un altro elenco di elementi.
ICustomTypeDescriptor Interfaccia
Una classe che implementa l'interfaccia ICustomTypeDescriptor fornisce informazioni dinamiche su se stessa. Questa interfaccia è simile a ITypedList ma viene usata per gli oggetti anziché per gli elenchi. Questa interfaccia viene usata da DataRowView per proiettare lo schema delle righe sottostanti. Una semplice implementazione di ICustomTypeDescriptor viene fornita dalla CustomTypeDescriptor classe .
Nota
Per supportare l'associazione in fase di progettazione ai tipi che implementano ICustomTypeDescriptor, il tipo deve anche implementare IComponent ed esistere come istanza del modulo.
IListSource Interfaccia
Una classe che implementa l'interfaccia abilita l'associazione IListSource basata su elenco su oggetti non elenco. Il GetList metodo di IListSource viene utilizzato per restituire un elenco associabile da un oggetto che non eredita da IList. IListSource viene usato dalla DataSet classe .
IRaiseItemChangedEvents Interfaccia
Una classe che implementa l'interfaccia IRaiseItemChangedEvents è un elenco associabile che implementa anche l'interfaccia IBindingList . Questa interfaccia viene utilizzata per indicare se il tipo genera ListChanged eventi di tipo ItemChanged tramite la relativa RaisesItemChangedEvents proprietà .
Nota
È necessario implementare se l'origine IRaiseItemChangedEvents dati fornisce la proprietà per elencare la conversione di eventi descritta in precedenza e interagisce con il BindingSource componente. In caso contrario, verrà eseguita anche la BindingSource proprietà per elencare la conversione degli eventi con prestazioni più lente.
ISupportInitialize Interfaccia
Un componente che implementa l'interfaccia sfrutta i vantaggi delle ottimizzazioni batch per l'impostazione ISupportInitialize delle proprietà e l'inizializzazione delle proprietà co-dipendenti. Contiene ISupportInitialize due metodi:
ISupportInitializeNotification Interfaccia
Un componente che implementa l'interfaccia ISupportInitializeNotification implementa anche l'interfaccia ISupportInitialize . Questa interfaccia consente di notificare ad altri ISupportInitialize componenti che l'inizializzazione è stata completata. L'interfaccia ISupportInitializeNotification contiene due membri:
IsInitialized restituisce un
boolean
valore che indica se il componente è inizializzato.Initialized si verifica quando EndInit viene chiamato .
INotifyPropertyChanged Interfaccia
Una classe che implementa questa interfaccia è un tipo che genera un evento quando uno dei valori delle proprietà viene modificato. Questa interfaccia è progettata per sostituire il criterio di disporre di un evento di modifica per ogni proprietà di un controllo. Se usato in , BindingList<T>un oggetto business deve implementare l'interfaccia INotifyPropertyChanged e BindingList'1 convertirà PropertyChanged gli eventi in ListChanged eventi di tipo ItemChanged.
Nota
Affinché la notifica di modifica venga eseguita in un'associazione tra un client associato e un'origine dati, il tipo di origine dati associato deve implementare l'interfaccia INotifyPropertyChanged (preferita) oppure è possibile fornire eventi propertyName
Changed
per il tipo associato, ma non è consigliabile eseguire entrambe le operazioni.
Interfacce per l'implementazione da parte degli autori del componente
Le interfacce seguenti sono progettate per l'uso da parte del motore di data-binding di Windows Forms:
IBindableComponent Interfaccia
Una classe che implementa questa interfaccia è un componente di non-controllo che supporta il data-binding. Questa classe restituisce i data binding e il contesto di associazione del componente tramite le DataBindings proprietà e BindingContext di questa interfaccia.
Nota
Se il componente eredita da Control, non è necessario implementare l'interfaccia IBindableComponent .
ICurrencyManagerProvider Interfaccia
Una classe che implementa l'interfaccia ICurrencyManagerProvider è un componente che fornisce il proprio CurrencyManager per gestire le associazioni associate a questo particolare componente. L'accesso all'oggetto personalizzato CurrencyManager viene fornito dalla CurrencyManager proprietà .
Nota
Una classe che eredita da Control gestisce automaticamente le associazioni tramite la relativa BindingContext proprietà, pertanto i casi in cui è necessario implementare sono ICurrencyManagerProvider piuttosto rari.
Vedi anche
.NET Desktop feedback