Elenco vs BindingList Vantaggi / DisAdvantages

Qualcuno può descrivere qual è la differenza tra i due per il mio progetto.

Attualmente ho una List e setto BindingSource a questo e DataGridView a BindingSource.

Ho implementato IEditableObject così, quando viene chiamato CancelEdit, restituisco il mio object a quello che era con Memberwise.Clone()

Cambiare la mia lista in BindingList risolverà tutto ciò e quali sono i vantaggi dell’utilizzo di BindingList?

Un List<> è semplicemente un array di ridimensionamento automatico, di elementi di un determinato tipo, con un paio di funzioni di supporto (ad esempio: ordinamento). Sono solo i dati e probabilmente lo userai per eseguire operazioni su un insieme di oggetti nel tuo modello.

A BindingList<> è un wrapper attorno a una lista o una raccolta tipizzata, che implementa l’interfaccia IBindingList . Questa è una delle interfacce standard che supportano l’associazione dati bidirezionale. Funziona implementando l’evento ListChanged , che viene generato quando aggiungi, rimuovi o imposta elementi. I controlli associati ascoltano questo evento per sapere quando aggiornare il loro display.

Quando si imposta un DataSource di BindingSource su un List<> , viene creato internamente un BindingList<> per includere l’elenco. Si consiglia di pre-avvolgere l’elenco con una BindingList<> se si desidera accedervi al di fuori di BindingSource, ma altrimenti è lo stesso. È inoltre ansible ereditare da BindingList<> per implementare un comportamento speciale durante la modifica degli elementi.

IEditableObject è gestito da BindingSource. Chiamerà BeginEdit su qualsiasi object di implementazione quando si modificano i dati in qualsiasi controllo associato. Puoi quindi chiamare EndEdit / CancelEdit su BindingSource e lo passerà al tuo object. Passare a una riga diversa chiamerà anche EndEdit.

Un BindingList consente l’associazione dati bidirezionale utilizzando gli eventi, una lista non genera eventi quando la sua collezione cambia.

Non penso che risolverà il tuo particolare problema.