2012-01-03 53 views
5

我有兩個ListBox在我的WinForms應用程序,我assigne數據源爲他們兩個如下:一個數據源的多個控件

private void MakeMeasurementUnits() 
{ 
    var units = new List<MeasurementUnit> 
        { 
         new MeasurementUnit {Name = "Current", SiUnit = "A"}, 
         new MeasurementUnit {Name = "Voltage", SiUnit = "V"}, 
         new MeasurementUnit {Name = "Time", SiUnit = "s"}, 
         new MeasurementUnit {Name = "Temprature", SiUnit = "°C"} 
        }; 

    lbxXunit.DataSource = units; 
    lbxYunit.DataSource = units; 
} 

奇怪的是(或者也許是因爲這是我的第一次! ),當我點擊其中一個lisbox的項目時,第二個列表框中的同一項目也被選中。這是默認行爲嗎?如何防止這種情況?如果這是默認行爲,那麼有什麼用處呢?

我找到快速的補救措施被做兩個不同的數據源(與另一名同樣的事情)

回答

5

列表框似乎緩存綁定源。這是默認行爲。如果你想避免這種情況,最簡單的方法是創建列表的副本綁定到第二個數據源:

​​

當你有相同數據的多個視圖,並要同步的,這是有用這些項目的選擇。

1

這是正確的行爲。 WindowsForms中的datasource管理跟蹤所選擇的項目並控制綁定數據。

您已經找到的分辨率:將2個不同的data sources objects分配給這些控件。

3

是的,這是正常的行爲。發生這種情況是因爲ListView控件使用BindingSource對象來跟蹤當前選定的項目。 (如果沒有BindingSource,則列表無法跟蹤所選項目。)

默認情況下,WinForms控件中的DataSource使用WinForms系統自身爲其創建的BindingSource。

你可以閱讀更多有關的BindingSource在: http://msdn.microsoft.com/en-us/library/system.windows.forms.bindingsource.aspx

這裏有一篇文章可能有助於太: http://blogs.msdn.com/b/bethmassi/archive/2007/09/19/binding-multiple-comboboxes-to-the-same-datasource.aspx

2

你已經注意到的行爲是對的WinForms控件的默認/正確的行爲。您可以通過爲第二個列表框控件設置新的BindingContext而無需創建數據源的副本來實現目標。

BindingContext