A List<>
es simplemente una matriz de cambio de tamaño automático, de elementos de un tipo determinado, con un par de funciones de ayuda (por ejemplo, ordenar). Son solo los datos, y es probable que los use para ejecutar operaciones en un conjunto de objetos en su modelo.
A BindingList<>
es un contenedor de una lista de tipos o una colección, que implementa la interfaz IBindingList
. Esta es una de las interfaces estándar que admiten enlaces de datos bidireccionales. Funciona implementando el evento ListChanged
, que se genera cuando agrega, elimina o establece elementos. Los controles vinculados escuchan este evento para saber cuándo actualizar su pantalla.
Cuando configura un origen de datos de BindingSource en List<>
, internamente crea un BindingList<>
para envolver su lista. Puede desempaquetar su lista con un BindingList<>
usted mismo si desea acceder a ella fuera de BindingSource, pero de lo contrario es lo mismo. También puede heredar de BindingList<>
para implementar un comportamiento especial al cambiar elementos.
IEditableObject
es manejado por BindingSource. Llamará a BeginEdit en cualquier objeto de implementación cuando cambie los datos en cualquier control vinculado. Luego puede llamar a EndEdit/CancelEdit en BindingSource y lo pasará a su objeto. Moverse a una fila diferente llamará también a EndEdit.
Actualmente con mi lista enfoque llamando a CancelEdit no devolverá el elemento que se está editando a su estado original, por lo tanto, por qué uso Clone(). ¿Estás diciendo que una lista de enlaces se encargará de eso por mí? –
Jon
No, un BindingList no tiene nada que ver con esa funcionalidad. BindingSource simplemente llama a CancelEdit en el objeto actual, independientemente del tipo de lista subyacente. No hay nada en el marco que implemente automáticamente el control de versiones de objetos para objetos simples. Puede usar DataTables/DataRows, que conservan una copia original de los datos solo para este propósito. –
Usted dice que los controles necesitan saber cuándo cambia la lista, ¿puede explicar más? Tengo un formulario con una vista de cuadrícula de datos y luego otra forma de eso con datos poblados. ¿Debo preocuparme por lo que dices en este asunto? – Jon