我在一个包含七个TabItem的WPF项目中有一个TabControl 在一个TabItem( TabA )中,我有一个ComboBox绑定到一个项目列表。所选项目绑定到我的代码隐藏中的属性。这很好,我可以完美地改变这个属性 在另一个TabItem( TabB )中,我可以用另一种方式更改同一属性。因此,ComboBox将重新选择新值。
问题是当 TabA 中的ComboBox由于属性从 TabB 更改而改变了SelectedItem时,OnSelectionChanged
事件会以某种方式冒泡到TabControl ,并引发TabControlSelectionChanged
事件 - 即使标签根本没有发生任何事情。
当我查看TabControlSelectionChanged
事件的参数
var selectedTab = e.AddedItems[0] as TabItem;
selectedTab为空。
为什么会发生这种情况,我该如何防止它发生?
答案 0 :(得分:1)
Evil Str回答了这个问题,但在他领导之后,我发现了另一种方法
在ComboBox SelectionChanged
事件中,只是阻止事件进一步冒泡。
private void ComboBoxOnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
// whatever code you want in here to handle the change of item
e.Handled = true;
}
答案 1 :(得分:0)
发生这种情况是因为TabControl.SelectionChanged与ComboBox.SelectionChanged是同一个事件。
我曾经遇到过这个问题。为了防止这种情况发生,我使用了以下代码:
private void myTab_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.Source is TabControl) //if this event fired from TabControl
{
if (tabItemName.IsSelected)
{
//Do what you need here.
}
}
}
您可以根据需要调整此代码。我希望这会对你有所帮助。