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

Changing value of control in TabItem makes TabControl change index. How?

我在包含七个 TabItem 的 WPF 项目中有一个 TabControl。
在一个 TabItem (TabA) 中,我有一个绑定到项目列表的 ComboBox。所选项目绑定到我的代码隐藏中的 属性。这很好用,我可以完美地更改 属性。
在另一个 TabItem (TabB) 中,我可以用另一种方式更改相同的 属性。 ComboBox 因此将反映新值。

问题是,当 TabA 中的 ComboBox 更改为 SelectedItem 时,由于 属性 从 TabB 更改 - OnSelectionChanged 事件以某种方式冒泡到 TabControl,并引发 TabControlSelectionChanged 事件 - 即使选项卡根本没有发生任何事情。

当我查看 TabControlSelectionChanged 事件的参数时

var selectedTab = e.AddedItems[0] as TabItem;

selectedTab 为空。

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

发生这种情况是因为 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.
                }
            }
        }

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

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;
}