2015-11-10 35 views
1

我希望ListBox在我將其用作DataSource的列表中刪除或添加對象時會自動顯示更改。將列表<T>連接到列表框並查看列表框中數據源的更改

如何將List<T>連接到ListBox並立即查看ListBox中潛在列表的變化?

+0

可能重複[如何將列表綁定到組合框? (Winforms)](http://stackoverflow.com/questions/600869/how-to-bind-a-list-to-a-combobox-winforms) – Sayse

+0

@Sayse我認爲這個問題不是該鏈接的重複: )該鏈接的重點在於將'List '設置爲'DataSource',但OP需要在ListBox中看到列表的變化,這意味着他應該使用'IBindingList'或'BindingList'的實現。 –

+0

@RezaAghaei - 在該問題中接受的答案提到,但是沒有解釋它。無論哪種方式,它不會花費很長時間操作找到重複...「winforms數據綁定列表」有複製作爲其第一個結果 – Sayse

回答

4

Windows Forms,在你想看到在綁定列表控件的數據源的變化,比如ComboBoxListBoxDataGridView(複雜的雙向數據綁定)的情形下,你應該使用實現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; 
0

請參見下面的示例,其中將字符串列表傳遞到列表框實例。

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; 
} 
} 
+0

'List '當您需要查看數據源的更改時不適用。 –