WPF TabControl - 当DataContext发生变化时,我可以阻止'取消选择'以前的DataContext?

时间:2015-03-03 15:30:44

标签: c# wpf mvvm tabcontrol

我有一个TabControl,它包含一个复合集合。复合集合由1"静态" 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集合项 - 一个集合的集合,&#39;如果你愿意的话。

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

...我将如何防止这种情况重置&#39;?我尝试在&#34; DataContextChanged&#34;中捕获它。事件,但似乎为时已晚; 视图模型。

1 个答案:

答案 0 :(得分:0)

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

我将“摘要标签”内容推送到虚拟机中,现在一切似乎都在运行。