我有一个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;中捕获它。事件,但似乎为时已晚; 视图模型。
答案 0 :(得分:0)
在尝试了大量自定义行为,事件处理程序和数据绑定组合之后,我得出的结论是,当混合使用静态和数据绑定项时,CompositeCollection与TabControl的效果不佳。
我将“摘要标签”内容推送到虚拟机中,现在一切似乎都在运行。