簡體   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