繁体   English   中英

绑定清单 <Double> 到WinForms-Listbox

[英]Bind List<Double> to WinForms-Listbox

我在数据绑定方面有一个小问题(可能是愚蠢的问题)。 我尝试绑定列表

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

到winforms ListBox。

在Form_Load中,我设置:

lstMeasuredValues.DataSource = _measuredValues;

更新值时,什么都没有出现?

_measuredValues.Add(numBuffer);

我想到的一件事是数据类型问题。 但是,如何仅将类型更改为字符串呢?

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

另一个原因可能是代码的高行在另一个线程中。 但是我认为这不应该是问题。

如何绑定此列表?

更好的方法是清除项目并再次分配数据源:

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();

更新值时,什么都没有出现?

_measuredValues.Add(numBuffer);

为了使UI能够反映数据源的修改,数据源必须提供某种变更通知。 WinForms列表数据绑定基础结构使用IBindingList接口的 ListChanged事件 提供了一个标准的BindingList <T>类 ,可以使用它代替List<T>以获得所需的行为。 您只需要更改此行

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

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

另一个原因可能是代码的高行在另一个线程中。 但是我认为这不应该是问题。

这不好。 必须确保不要这样做,因为预期UI线程上会引发ListChanged事件。

问题在于,通用List不是数据绑定的正确选择。 如果要保持更新ListBox,则应使用BindingList

尝试以这种方式使用它:

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

请记住,当您在_measuredValues中添加新项目时,必须手动刷新绑定,直到现在为止,如下所示:

bindList.ResetBindings();

您可以将BindingList<double>用作列表框的数据源

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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM