Assume you are doing something like the following
List<string> myitems = new List<string> { 'Item 1', 'Item 2', 'Item 3' }; ComboBox box = new ComboBox(); box.DataSource = myitems; ComboBox box2 = new ComboBox(); box2.DataSource = myitems
So now we have 2 combo boxes bound to that array, and everything works fine. But when you change the value of one combo box, it changes BOTH combo boxes to the one you just selected.
Now, I know that Arrays are always passed by reference (learned that when i learned C :D), but why on earth would the combo boxes change together? I don’t believe the combo box control is modifying the collection at all.
As a workaround, don’t this would achieve the functionality that is expected/desired
ComboBox box = new ComboBox(); box.DataSource = myitems.ToArray();
This has to do with how data bindings are set up in the dotnet framework, especially the
BindingContext. On a high level it means that if you haven’t specified otherwise each form and all the controls of the form share the sameBindingContext. When you are setting theDataSourceproperty theComboBoxwill use theBindingContextto get aConcurrenyMangagerthat wraps the list. TheConcurrenyManagerkeeps track of such things as the current selected position in the list.When you set the
DataSourceof the secondComboBoxit will use the sameBindingContext(the forms) which will yield a reference to the sameConcurrencyManageras above used to set up the data bindings.To get a more detailed explanation see BindingContext.