visual una net example español enlazar datos data como c# .net winforms data-binding listbox

c# - una - Lista de enlaces<Double> a WinForms-Listbox



data binding c# español (6)

Tengo un problema pequeño (probablemente tonto) con enlace de datos. Intento unir una Lista

List<double> _measuredValues = new List<double>();

a un ListBox de winforms.

En Form_Load establecí:

lstMeasuredValues.DataSource = _measuredValues;

Cuando actualizo los valores, no aparece nada?

_measuredValues.Add(numBuffer);

Una cosa en la que pensé es un problema con el tipo de datos. ¿Pero cómo cambio el tipo solo para cambiarlo a una cadena?

lstMeasuredValues.DataSource = _measuredValues.ToString().ToList();

Otra razón podría ser que la línea superior del código está dentro de otro hilo. Pero creo que este no debería ser el problema.

¿Cómo puedo enlazar esta lista?


Cuando actualizo los valores, no aparece nada?

_measuredValues.Add (numBuffer);

Para permitir que la IU refleje las modificaciones de la fuente de datos, la fuente de datos debe proporcionar algún tipo de notificación de cambio. La infraestructura de enlace de datos de la lista WinForms usa el evento ListChanged de la interfaz IBindingList . Existe una clase BindingList <T> estándar que se puede usar en lugar de List<T> para obtener el comportamiento deseado. Todo lo que necesitas es cambiar esta línea

List<double> _measuredValues = new List<double>();

a

BindingList<double> _measuredValues = new BindingList<double>();

Otra razón podría ser que la línea superior del código está dentro de otro hilo. Pero creo que este no debería ser el problema.

Eso no es bueno. Debe asegurarse de no hacer eso porque se espera que el evento ListChanged se ListChanged en el subproceso de UI.


El problema es que la List común no es la elección correcta para el enlace de datos. Debería usar BindingList si desea mantener actualizado el ListBox.

Intenta usarlo de esta manera:

BindingList<double> bindList = new BindingList<double>(_measuredValues); lstMeasuredValues.DataSource = bindList;

Tenga en cuenta que cuando agrega un nuevo elemento en _measuredValues, debe actualizar manualmente el enlace, como ahora, así:

bindList.ResetBindings();


La mejor manera es borrar los elementos y asignar nuevamente el DataSource:

lstMeasuredValues.Items.Clear()// clear all items lstMeasuredValues.DataSource = _measuredValues;

O incluso puede definir su propia función de actualización y llamar de la siguiente manera:

public void RefreshList() { lstMeasuredValues.Items.Clear()// clear all items lstMeasuredValues.DataSource = _measuredValues; }

Y llámalos cuando necesites actualizar la lista:

_measuredValues.Add(numBuffer); RefreshList(); // Add more values RefreshList();


Puede usar una BindingList<double> como DataSource de su Listbox

List<double> _measuredValues = new List<double>(); BindingList<double> bindList = new BindingList<double>(_measuredValues); lstMeasuredValues.DataSource = bindList;

Ahora, cada vez que necesite agregar un elemento, utilice la variable bindList y su listbox se actualizará automáticamente, así como su lista _measuredValues


Todo lo que necesita hacer para actualizar la lista después de la actualización:

lstMeasuredValues.Refresh();


Una de las formas más simples de hacerlo es poniendo:

lstMeasuredValues.DataSource = null; //the cheapest, trickiest, but the most important line lstMeasuredValues.DataSource = _measuredValues;

Siempre que su elemento _measuredValues se actualice