A List<>
est simplement un tableau de redimensionnement automatique, d'éléments d'un type donné, avec quelques fonctions d'assistance (par exemple: sort). Ce ne sont que les données, et vous allez probablement les utiliser pour exécuter des opérations sur un ensemble d'objets de votre modèle.
A BindingList<>
est un wrapper autour d'une liste typée ou d'une collection, qui implémente l' IBindingList
interface. C'est l'une des interfaces standard qui prennent en charge la liaison de données bidirectionnelle. Cela fonctionne en implémentant l' ListChanged
événement, qui est déclenché lorsque vous ajoutez, supprimez ou définissez des éléments. Les contrôles liés écoutent cet événement afin de savoir quand actualiser leur affichage.
Lorsque vous définissez DataSource d'un BindingSource sur a List<>
, il crée en interne un BindingList<>
pour encapsuler votre liste. Vous voudrez peut-être pré-envelopper votre liste avec un BindingList<>
vous-même si vous souhaitez y accéder en dehors de BindingSource, mais sinon, c'est la même chose. Vous pouvez également hériter de BindingList<>
pour implémenter un comportement spécial lors de la modification d'éléments.
IEditableObject
est géré par le BindingSource. Il appellera BeginEdit sur n'importe quel objet d'implémentation lorsque vous modifiez les données dans n'importe quel contrôle lié. Vous pouvez ensuite appeler EndEdit / CancelEdit sur le BindingSource et il le transmettra à votre objet. Le passage à une ligne différente appellera également EndEdit.