我有一个TabControl,其中每个TabItem的内容都是主 - 详细信息视图。
对于master,我正在使用一个列表框,其ItemsSource
绑定到我的ViewModel中的一个集合。从列表中选择一个项目会在一个网格中显示该特定项目的详细信息。
当我切换到另一个标签然后返回原始标签时,列表框选择似乎丢失了。
当标签选择发生变化时,如何维护每个标签中的列表框选择?
在正常使用中,最终用户需要按照自己喜欢的方式为特定情况“设置”详细信息视图,然后偶尔循环选项卡以检查每个系统(每个选项卡提供不同机器的详细信息)生产线)。
TabControl如下所示:
<TabControl
ItemsSource="{Binding DiagCards}"
ContentTemplate="{StaticResource DiagCardViewTemplate}"
SelectedItem="{Binding SelectedDiagCard}" />
每个TabItem的View都有一个如下所示的ListBox:
<ListBox
ItemsSource="{Binding DiagCard.DevicesDetected}"
SelectedItem="{Binding SelectedDevice}"/>
详细信息使用ContentControl显示在TabItem中:
<ContentControl
Content="{Binding SelectedDevice}"
ContentTemplateSelector="{StaticResource SelectedDeviceTemplateSelector}"/>
我应该注意,使用硬编码的TabItems和ListBoxes 的简单测试似乎在选项卡更改时保持选择:
<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"
,一切似乎都很好。
答案 0 :(得分:2)
根据您的评论,我猜您的视图模型中的某些内容正在发生变化,以删除所选项目。你能在SelectedDevice的setter上设置断点并检查调用堆栈吗?
要测试一下,您可以删除SelectedItem = {}代码并查看更改标签时是否保持选中状态吗?
为了更完整地回答,我需要查看更多代码。