C# WPF中TabControl的SelectionChangedEventHandler

C# WPF中TabControl的SelectionChangedEventHandler,c#,wpf,C#,Wpf,我是WPF新手,在创建用于更改TabControl中选项卡的事件处理程序时遇到问题。简言之,我不明白如何查找与事件关联的以前选定的TabItem索引和新选定的TabItem索引 以下是我迄今为止尝试过的代码: private void primaryFilterChanged(object sender, SelectionChangedEventArgs e) { if (e.Source is TabControl && IsLoaded) {

我是WPF新手,在创建用于更改TabControl中选项卡的事件处理程序时遇到问题。简言之,我不明白如何查找与事件关联的以前选定的TabItem索引和新选定的TabItem索引

以下是我迄今为止尝试过的代码:

private void primaryFilterChanged(object sender, SelectionChangedEventArgs e) {
    if (e.Source is TabControl && IsLoaded) {
            int previous_index = (e.RemovedItems[0] as TabItem).TabIndex;
            int current_index = (e.AddedItems[0] as TabItem).TabIndex;
    ...
    }
}
但我现在意识到,“TabIndex”并不是指我认为它所做的事情,而是指使用Tab键时焦点项目的顺序

我知道我可以使用
tabcontrol.SelectedIndex
来获取新索引,但对于其他函数,我也需要上一个索引。非常感谢


编辑:我使用的解决方法是创建我自己的“selectedTab”整数,该整数在事件处理程序的末尾进行更新,但我正在寻找比这更优雅的东西。

您可以获得如下旧索引:

var tabControl = e.Source as TabControl;
var oldTabItem = e.RemovedItems[0] as TabItem;
var oldIndex = tabControl.Items.IndexOf(oldTabItem);

TabCOntrol是WPF从中继承的,因此您只需将它连接到事件处理程序,它就会有一个AddedItems/RemovedItems列表。这些会有你想要的

例如,假设你有这个

<TabControl SelectionChanged="TabSelectionChanged" SelectionMode="Single">
....
....
....
....
</TabControl>

对,我明白。但我的步骤太短了,忘记了使用tabControl.Items.IndexOf来获取相关的索引,这主要是我感兴趣的。感谢您的回复。事实上,如果您做得非常正确,您将使用MVVM并公开IEnumerable,然后使用DataTemplates或PRISM或其他任何工具,还可能使用ICollectionView接口来处理选择更改。但是保持代码隐藏听起来像是你现在被归类为完全诚实的人,我仍然是C#的初学者,不知道这意味着什么。我会调查的。非常感谢。
void TabSelectionChanged(object sender, SelectionChangedEventArgs args)
{
    var removedItems = args.RemovedItems;
    var addedItems = args.AddedItems;
}