选项卡更改时WPF维护列表框选择

时间:2009-12-22 19:49:21

标签: c# wpf xaml mvvm listbox

我有一个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",一切似乎都很好。

1 个答案:

答案 0 :(得分:2)

根据您的评论,我猜您的视图模型中的某些内容正在发生变化,以删除所选项目。你能在SelectedDevice的setter上设置断点并检查调用堆栈吗?

要测试一下,您可以删除SelectedItem = {}代码并查看更改标签时是否保持选中状态吗?

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