WPF TabControl,切换到另一个TabItem不起作用,坚持到第一个TabItem

WPF TabControl,切换到另一个TabItem不起作用,坚持到第一个TabItem,wpf,data-binding,tabcontrol,itemssource,Wpf,Data Binding,Tabcontrol,Itemssource,我有一个包含以下XAML代码的控件。它工作正常,但我不能切换到其他选项卡项。我读到TabControl虚拟化了TabItem,我怀疑奇怪的行为,即我无法将任何其他TabItem显示为第一个,与此相关 <TabControl ItemsSource="{Binding Items}"> <TabControl.ItemTemplate> <DataTemplate> <!-- header -->

我有一个包含以下XAML代码的控件。它工作正常,但我不能切换到其他选项卡项。我读到
TabControl
虚拟化了
TabItem
,我怀疑奇怪的行为,即我无法将任何其他TabItem显示为第一个,与此相关

    <TabControl ItemsSource="{Binding Items}">
        <TabControl.ItemTemplate>
            <DataTemplate> <!-- header -->
                <TextBlock Text="{Binding Title}"></TextBlock>
            </DataTemplate>
        </TabControl.ItemTemplate>
        <TabControl.ContentTemplate>
            <DataTemplate x:Shared="False"> <!-- tabitem content -->
                <controls:ItemControl Item="{Binding}" />
            </DataTemplate>
        </TabControl.ContentTemplate>
    </TabControl>


我试图将
DataTemplate
x:Shared
属性设置为
False
,但没有达到预期效果。有没有办法做到这一点,而不必使用自定义样式并将
TabControl
替换为
ItemsControl
。我的意思是
TabControl
的功能正是我想要的,我只想将它与
ItemsSource
binding一起使用…

如果您绑定到一个包含重复对象的集合,就会发生这种行为。
重复可能是由于多次添加对象,或者因为已为相关对象重新定义了相等性

您在项目中绑定到什么类型?虚拟化不应该影响任何东西,因为它只对实际的选项卡项起作用,而不是对它们的内容。它实际上是一个
observedcollection
,其中每个
IItem
都有一个
iaAttribute
的集合,这些集合显示在自定义ItemControl中(并且工作正常,第一个项目正确显示+所有其他项目的选项卡都存在)我只是看起来无法切换。此外,可能我是从WinForms迁移过来的,以前在使用数据绑定之前,我有一个迁移的中间状态,在该状态下,我以编程方式创建了TabItems并将它们添加到TabControl。到那时,TabControl的行为正常。通过切换到绑定到ItemsSource,情况会有所不同很奇怪。如果你的iItem覆盖了相等运算符,tabcontrol可能会对虚拟化感到困惑,我想,也许值得一看。你是个天才,是的,它确实覆盖了等于,如果我尝试覆盖等于的简单类并让它总是返回true,我也有同样的错误行为。这个提示似乎非常好!让我检查一下使用原始类。这太棒了,如果我能找到它的话,我会花很多时间自己去解决它。相反,我会在没有数据绑定的情况下将整个代码还原为更糟糕的解决方案(并且也不会发现或修复
Equals
中的错误)