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 中,现在一切似乎都正常工作。
我有一个 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 中,现在一切似乎都正常工作。