我希望ListBox
在我將其用作DataSource
的列表中刪除或添加對象時會自動顯示更改。將列表<T>連接到列表框並查看列表框中數據源的更改
如何將List<T>
連接到ListBox
並立即查看ListBox
中潛在列表的變化?
我希望ListBox
在我將其用作DataSource
的列表中刪除或添加對象時會自動顯示更改。將列表<T>連接到列表框並查看列表框中數據源的更改
如何將List<T>
連接到ListBox
並立即查看ListBox
中潛在列表的變化?
在Windows Forms
,在你想看到在綁定列表控件的數據源的變化,比如ComboBox
,ListBox
或DataGridView
(複雜的雙向數據綁定)的情形下,你應該使用實現IBindingList
接口爲一類數據綁定的DataSource
。最合適的實現是BindingList<T>
。這樣,每個控件的基礎數據源中的添加/刪除操作都將立即在控件中可見。
請記住,使用BindingList<T>
可以使綁定控件看到添加或刪除的項目,但是也要立即查看屬性更改,T
應該實現INotifyPropertyChanged
。這樣,您的控件將被通知PropertyChanged
並始終顯示新的數據。
注1 - ObservableCollection是否解決雙向數據綁定Probelm?
在Windows窗體中,一個常見的錯誤是使用ObservableCollection
,因爲它不實現IBindingList
,所以對此需求不起作用。
注2 - BindingSource是否解決雙向數據綁定問題?
如果BindingSource
的底層數據源沒有執行IBindingList<T>
它不能解決雙向數據綁定問題。您需要通知控件重新加載來自綁定源的數據,因此您可以撥打ResetBindings
方法BindingSource
。通過這種方式,綁定控件將重新從數據源的數據,並顯示最新的數據:
this.bindingSource1.ResetBindings(false);
注3 - 我應該使用List<T>
。我如何使用List<T>
解決問題?
如果你必須使用List<T>
,那麼你可以重新設置您的列表框中的數據綁定當你需要,例如每次變更後應先分配其DataSource
爲null,數據列表:
this.listBox1.DataSource = null;
this.listBox1.DataSource = list;
請參見下面的示例,其中將字符串列表傳遞到列表框實例。
public partial class Form1 : Form
{
List<string> _items = new List<string>(); // <-- Add this
public Form1()
{
InitializeComponent();
_items.Add("One"); // <-- Add these
_items.Add("Two");
_items.Add("Three");
listBox1.DataSource = _items;
}
}
'List
可能重複[如何將列表綁定到組合框? (Winforms)](http://stackoverflow.com/questions/600869/how-to-bind-a-list-to-a-combobox-winforms) – Sayse
@Sayse我認爲這個問題不是該鏈接的重複: )該鏈接的重點在於將'List'設置爲'DataSource',但OP需要在ListBox中看到列表的變化,這意味着他應該使用'IBindingList'或'BindingList'的實現。 –
@RezaAghaei - 在該問題中接受的答案提到,但是沒有解釋它。無論哪種方式,它不會花費很長時間操作找到重複...「winforms數據綁定列表」有複製作爲其第一個結果 – Sayse