A List<>è semplicemente un array ridimensionato automaticamente, di elementi di un dato tipo, con un paio di funzioni di supporto (ad esempio: sort). Sono solo i dati e probabilmente li utilizzerai per eseguire operazioni su un insieme di oggetti nel tuo modello.
A BindingList<>è un wrapper attorno a un elenco digitato o una raccolta, che implementa l' IBindingListinterfaccia. Questa è una delle interfacce standard che supportano l'associazione dati bidirezionale. Funziona implementando l' ListChangedevento, che viene generato quando si aggiungono, rimuovono o impostano elementi. I controlli associati ascoltano questo evento per sapere quando aggiornare la loro visualizzazione.
Quando si imposta DataSource di BindingSource su a List<>, viene creato internamente a BindingList<>per racchiudere l'elenco. Potresti voler pre-avvolgere il tuo elenco con un BindingList<>te stesso se vuoi accedervi al di fuori di BindingSource, ma per il resto è lo stesso. È inoltre possibile ereditare da BindingList<>per implementare un comportamento speciale durante la modifica degli elementi.
IEditableObjectè gestito da BindingSource. Chiamerà BeginEdit su qualsiasi oggetto di implementazione quando modifichi i dati in qualsiasi controllo associato. Puoi quindi chiamare EndEdit / CancelEdit su BindingSource e lo passerà al tuo oggetto. Il passaggio a una riga diversa chiamerà anche EndEdit.