In C# WPF, why is my TabControl's SelectionChanged event firing too often?
The TabControl.SelectionChanged
is the same event as a ComboBox.SelectionChanged
It originates from Selector.SelectionChanged
.
So, if you do not mark your event as handled in your event handler, it will bubble up the tree, and eventually arrive at your TabControl
, which is causing this "firing too often" issue.
Mark your event as handled in your SelectionChanged of your ComboBox
/ListBox
/ListView
/any other Selector you use in your DataGrid like so:
private void MyComboBox_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
e.Handled = true;
}
And this inconvenience will go away ;).
private void tabControlName_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (e.Source is TabControl) //if this event fired from TabControl then enter { if (tabItemName.IsSelected) { //Do your job here } } }
If you have added a handler with AddHandler in a parent element, all selection changes will fire the SelectionChanged-event. In this case, you can give your TabControl a name and then check in the EventHandler if the name of the OriginalSource is the name of your TabControl.
Another good approch is adding a handler to the tabControl.Items.SelectionChanged:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
ItemCollection view = tabControl.Items;
view.CurrentChanged += new EventHandler(view_CurrentChanged);
}
void view_CurrentChanged(object sender, EventArgs e)
{
throw new NotImplementedException();
}
Maybe is not the xamly way, but is less pain as it only fires when an item is changed.