2012-01-03 11 views
5

tengo dos ListBox en mi aplicación WinForms, me cedida una fuente de datos para los dos de la siguiente manera:Una fuente de datos para múltiples controles

private void MakeMeasurementUnits() 
{ 
    var units = new List<MeasurementUnit> 
        { 
         new MeasurementUnit {Name = "Current", SiUnit = "A"}, 
         new MeasurementUnit {Name = "Voltage", SiUnit = "V"}, 
         new MeasurementUnit {Name = "Time", SiUnit = "s"}, 
         new MeasurementUnit {Name = "Temprature", SiUnit = "°C"} 
        }; 

    lbxXunit.DataSource = units; 
    lbxYunit.DataSource = units; 
} 

Lo extraño es (o tal vez debido a que es la primera vez !!), en la forma en que hago clic en los elementos de uno de estos lisboxes, también se selecciona el mismo elemento en el segundo cuadro de lista. ¿Es esto un comportamiento predeterminado? cómo prevenir esto? Si este es el comportamiento predeterminado, ¿qué es útil al respecto?

he encontrado el remedio rápido para estar haciendo dos fuentes de datos diferentes (lo mismo con otro nombre)

Respuesta

5

El cuadro de lista parece almacenar en caché el origen de enlace. Este es el comportamiento predeterminado. Si se quiere evitar esto, el camino más fácil es crear una copia de la lista de obligar a la segunda fuente de datos:

lbxXunit.DataSource = units; 
lbxYunit.DataSource = units.ToList(); 

Esto es útil cuando se tiene varias vistas de los mismos datos y desea sincronizar el selección de estos artículos.

1

Este es el comportamiento correcto de. La gestión datasource en WindowsForms realiza un seguimiento del elemento seleccionado en el control y también manipula los datos enlazados.

La resolución que ya ha encontrado: es asignar 2 diferentes data sources objects a estos controles.

3

Sí, esto es un comportamiento normal. Sucede porque el control ListView usa un objeto BindingSource para rastrear el elemento seleccionado actualmente. (Una lista no tiene manera de realizar un seguimiento de un elemento seleccionado sin BindingSource.)

Por defecto, un origen de datos en un control de Windows Forms utiliza un BindingSource creado para ella por el sistema Windows Forms en sí.

Puede leer más sobre el BindingSource en: http://msdn.microsoft.com/en-us/library/system.windows.forms.bindingsource.aspx

Hay un artículo aquí que podría ayudar también: http://blogs.msdn.com/b/bethmassi/archive/2007/09/19/binding-multiple-comboboxes-to-the-same-datasource.aspx

2

El comportamiento que ha observado es el comportamiento por defecto/correcta para los controles de Windows Forms. Puede lograr lo que busca configurando un nuevo BindingContext para su segundo control de cuadro de lista sin crear una copia de su fuente de datos.

BindingContext

Cuestiones relacionadas