更改TabItem中的控件值会使TabControl更改索引。如何?

时间:2015-11-25 12:47:43

标签: c# wpf combobox tabcontrol tabitem

我在一个包含七个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为空。

为什么会发生这种情况,我该如何防止它发生?

2 个答案:

答案 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.
                }
            }
        }

您可以根据需要调整此代码。我希望这会对你有所帮助。