If you have ever wanted to take some action when a user changes a selection in a combo-box (drop down selection list) you would put your code in the SelectionChanged event of the WinForm or WPF system. If you have ever wanted to set the combo-box to a default value when the window is being created, then you have probably experienced what this article is about. When you set the combo-box to a default value, the SelectionChanged event is fired. In a majority of the cases you do not want this to happen because, 1. it’s not being triggered by a user action and 2. it will execute the logic in your SelectionChanged event, probably unnecessarily, increasing startup/rendering time. What I do to get around this is detach and then reattach the event before and after the default value is set. This is also referred to as “wiring up” and event.
[sourcecode language="csharp" padlinenumbers="true" autolinks="false" gutter="false" toolbar="false"] private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e) { MessageBox.Show("comboBox1_SelectionChanged event called", "Event", MessageBoxButton.OK, MessageBoxImage.Information); //Add your other logic here.... } [/sourcecode]
Above is the method that gets triggered when the user changes the value or the program changes the value in the combo-box. For this example I display a message box. Below is the logic that loads 2 strings into a LIST and then populates the the combo-box with the LIST. Just a simple example, in a real system you would probably do a data bind with a result set from the database.
[sourcecode language="csharp" autolinks="false" gutter="false" toolbar="false"] public void PopulateAssemblyComboBox() { List<string> comboBoxList = new List<string>(); comboBoxList.Add("Some Date"); comboBoxList.Add("Default Data"); comboBox1.ItemsSource = comboBoxList; comboBox1.SelectionChanged -= new SelectionChangedEventHandler(comboBox1_SelectionChanged); comboBox1.Text = "Default Data"; comboBox1.SelectionChanged += new SelectionChangedEventHandler(comboBox1_SelectionChanged); } [/sourcecode]
You will see that I bind the comboboxList to the ItemsSource of the comboBox, then I de-attach the SelectionChanged event from the comboBox, set the default value and then rewire the event to the comboBox. I need to rewire it so that when a user changes the value the SelectionChanged event is triggered and what is coded in the event is executed.