关于C#:WPF维护列表框选择当标签的变化

WPF Maintain ListBox selection when tab changes

我有一个TabControl,其中每个TabItem的内容都是主从视图。

对于主版本,我正在使用一个列表框,该列表框的ItemsSource绑定到ViewModel中的集合。从列表中选择一个项目将在旁边的网格中显示该特定项目的详细信息。

当我切换到另一个选项卡然后返回到原始选项卡时,列表框选择似乎丢失了。

我能做些什么,以保持在每个选项卡时,选项卡选择更改列表框中选择?

在正常使用情况下,最终用户将需要按照自己喜欢的方式"设置"详细视图,然后不时循环浏览选项卡以检查每个系统(每个选项卡提供了不同机器上的详细信息)生产线)。

TabControl看起来像这样:

1
2
3
4
<TabControl
    ItemsSource="{Binding DiagCards}"
    ContentTemplate="{StaticResource DiagCardViewTemplate}"
    SelectedItem="{Binding SelectedDiagCard}" />

每个TabItem的视图都有一个如下所示的ListBox:

1
2
3
<ListBox
   ItemsSource="{Binding DiagCard.DevicesDetected}"
   SelectedItem="{Binding SelectedDevice}"/>

使用ContentControl在TabItem中显示详细信息:

1
2
3
<ContentControl
   Content="{Binding SelectedDevice}"
   ContentTemplateSelector="{StaticResource SelectedDeviceTemplateSelector}"/>

我要指出,使用硬编码的TabItems和列表框一个简单的测试似乎并维护该选择当标签的变化:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    <TabControl>
        <TabItem Header="tab 1">
            <ListBox>
                <ListBoxItem>
                    <TextBlock Text="item 1-1"/>
                </ListBoxItem>
                <ListBoxItem>
                    <TextBlock Text="item 1-2"/>
                </ListBoxItem>
            </ListBox>
        </TabItem>
        <TabItem Header="tab 2">
            <ListBox>
                <ListBoxItem>
                    <TextBlock Text="item 2-1"/>
                </ListBoxItem>
                <ListBoxItem>
                    <TextBlock Text="item 2-2"/>
                </ListBoxItem>
            </ListBox>
        </TabItem>
    </TabControl>

更新:我在列表框中设置了IsSynchronizedWithCurrentItem="True",一切似乎都很好。


根据您的评论,我想您的视图模型中发生了一些变化,以删除所选项目。您可以在SelectedDevice的设置器上设置断点并检查调用堆栈吗?

要测试是否可以删除SelectedItem = {}代码,并在更改选项卡时查看它是否保持选中状态?

要更完整地回答,我需要查看更多代码。