WPF TabControl - 当 DataContext 更改时,我可以阻止以前的 DataContext 的 'de-selection' 吗?

WPF TabControl - when DataContext changes, can I prevent 'de-selection' of the previous DataContext?

我有一个 TabControl,它包含一个复合集合。复合集合由 1 个 "static" TabItem 和一组数据绑定项组成,位于 ViewModel:

<TabControl x:Name="myCompositeTabs"
            ItemContainerStyle="{StaticResource CloseableTabItem}" 
            Style="{StaticResource ScrollableTabControl}"
            ItemTemplate="{StaticResource CloseableTabItemHeaderDataTemplate}"
            SelectedIndex="{Binding SelectedIndex}">
        <TabControl.Resources>
            <CollectionViewSource x:Key="boundTabCollection" Source="{Binding MyItems}" />
        </TabControl.Resources>
        <TabControl.ItemsSource>
            <CompositeCollection>
                <TabItem x:Name="summaryTab" Header="Summary">
                    <views:SummaryView />
                </TabItem>
                <CollectionContainer Collection="{Binding Source={StaticResource boundTabCollection}}" />
            </CompositeCollection>
        </TabControl.ItemsSource>
    </TabControl>

TabControl 的 DataContext 经常更改,因为 TabControl 本身表示当前选择的完全独立的 ViewModel 集合的项目 - 如果您愿意,可以是 'collection of collections,'。

我遇到的问题是;在 DataContext 切换期间,TabControl 的本机行为似乎 'reset' SelectedIndex 为 -1。因此,每次用户选择不同的 ViewModel 时,TabControl 'resets' 都会选择先前选择的 ViewModel 的索引。我不希望它那样做;当上下文切换时,我希望它单独保留 SelectedIndex - 每个 ViewModel 都应该能够跟踪自己的 SelectedIndex 值。

...我将如何防止这种情况 'reset'?我尝试在 "DataContextChanged" 事件中捕获它,但似乎为时已晚;该事件在 所选索引已在 'old' ViewModel 上重置后引发。

在尝试了大量的自定义行为、事件处理程序和数据绑定组合之后,我得出的结论是,在混合静态和数据绑定项目时,CompositeCollection 不能很好地与 TabControl 配合使用。

我将 "Summary Tab" 内容推送到 VM 中,现在一切似乎都正常工作。