A List<>
é simplesmente uma matriz de redimensionamento automático, de itens de um determinado tipo, com algumas funções auxiliares (por exemplo: classificar). São apenas os dados, e é provável que você os use para executar operações em um conjunto de objetos em seu modelo.
A BindingList<>
é um wrapper em torno de uma lista digitada ou uma coleção, que implementa a IBindingList
interface. Esta é uma das interfaces padrão que suportam ligação de dados bidirecional. Ele funciona implementando o ListChanged
evento, que é gerado quando você adiciona, remove ou define itens. Os controles vinculados ouvem esse evento para saber quando atualizar sua exibição.
Quando você define um DataSource de BindingSource como a List<>
, ele cria internamente um BindingList<>
para agrupar sua lista. Você pode querer pré-empacotar sua lista com um BindingList<>
você mesmo se quiser acessá-la fora do BindingSource, mas caso contrário, é a mesma coisa. Você também pode herdar de BindingList<>
para implementar um comportamento especial ao alterar itens.
IEditableObject
é manipulado pelo BindingSource. Ele chamará BeginEdit em qualquer objeto de implementação quando você alterar os dados em qualquer controle vinculado. Você pode então chamar EndEdit / CancelEdit no BindingSource e ele irá repassá-lo ao seu objeto. Mover para uma linha diferente também chamará EndEdit.