绑定列表<;加倍>;到WinForms列表框
本文关键字:列表 WinForms 加倍 lt 绑定 gt | 更新日期: 2023-09-27 18:30:04
我在数据绑定方面遇到了一个小问题(可能是愚蠢的)。我尝试绑定列表
List<double> _measuredValues = new List<double>();
到winforms ListBox。
在Form_Load中我设置:
lstMeasuredValues.DataSource = _measuredValues;
当我更新值时,什么都不显示?!
_measuredValues.Add(numBuffer);
我想到的一件事是数据类型问题。但是,我如何更改类型以将其更改为字符串呢?
lstMeasuredValues.DataSource = _measuredValues.ToString().ToList();
另一个原因可能是代码的上一行在另一个线程中。但我认为这不应该是问题所在。
如何绑定此列表?
当我更新值时,什么都不显示?!
_measuredValues.Add(numBuffer);
为了允许UI反映数据源修改,数据源必须提供某种更改通知。WinForms列表数据绑定基础结构使用IBindingList接口的ListChanged事件。有一个标准提供的BindingList<T>类,该类可以代替CCD_ 1来获得期望的行为。你所需要的只是更改这条线路
List<double> _measuredValues = new List<double>();
至
BindingList<double> _measuredValues = new BindingList<double>();
另一个原因可能是代码的上一行在另一个线程中。但我认为这不应该是问题所在。
这不好。您必须确保不要执行此操作,因为ListChanged
事件预计会在UI线程上引发。
更好的方法是清除项目并再次分配DataSource:
lstMeasuredValues.Items.Clear()// clear all items
lstMeasuredValues.DataSource = _measuredValues;
或者,您甚至可以定义自己的刷新功能,并像下面这样调用:
public void RefreshList()
{
lstMeasuredValues.Items.Clear()// clear all items
lstMeasuredValues.DataSource = _measuredValues;
}
当你需要刷新列表时给他们打电话:
_measuredValues.Add(numBuffer);
RefreshList();
// Add more values
RefreshList();
问题是常见的List
不是数据绑定的正确选择。如果要保持ListBox的更新,则应使用BindingList。
试着这样使用:
BindingList<double> bindList = new BindingList<double>(_measuredValues);
lstMeasuredValues.DataSource = bindList;
请记住,当您在_measuredValues中添加新项时,您必须手动刷新绑定,就我目前而言,如下所示:
bindList.ResetBindings();
您可以使用BindingList<double>
作为Listbox 的DataSource
List<double> _measuredValues = new List<double>();
BindingList<double> bindList = new BindingList<double>(_measuredValues);
lstMeasuredValues.DataSource = bindList;
现在,每当您需要添加元素时,请使用bindList变量,您的列表框将自动更新,_measuredValues
列表
最简单的方法之一是放入:
lstMeasuredValues.DataSource = null; //the cheapest, trickiest, but the most important line
lstMeasuredValues.DataSource = _measuredValues;
每当更新_measuredValues
元素时,
更新后刷新列表所需的全部操作:
lstMeasuredValues.Refresh();