2010-02-11 10 views
73

¿Puede alguien describir cuál es la diferencia entre los dos para mi proyecto.Lista <T> vs BindingList <T> Ventajas/Disadvantages

Actualmente tengo un List<MyClass> y configuro BindingSource para eso y un DataGridView para BindingSource.

he implementado IEditableObject así que cuando CancelEdit se llama puedo volver mi objetivo volver a lo que era con un Memberwise.Clone()

¿Cambiar mi lista a un BindingList resolver ninguno de esto y cuáles son las ventajas de utilizar un BindingList?

Respuesta

100

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.

+0

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

+2

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. –

+0

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

10

Un BindingList permite el enlace de datos bidireccional mediante el uso de eventos, una Lista no activa eventos cuando su colección cambia.

No creo que solucione su problema en particular.