2009-12-22 63 views
0

我有一个TabControl,其中每个TabItem的内容都是主控细节视图。WPF在选项卡更改时维护列表框选择

对于主人,我使用的列表框的ItemsSource绑定到我的ViewModel集合。从列表中选择一个项目可以在网格中显示特定项目的细节。

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

当选项卡选择更改时,如何维护每个选项卡中的列表框选择?

在正常使用中,最终用户需要按照他们喜欢的方式为特定情况“设置”详细视图,然后偶尔循环查看每个系统的标签(每个标签提供了机器的详细信息不同的产品线)。

的TabControl的是这样的:

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

每个TabItem的视图有一个列表框,看起来像这样:

<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

当你说“列表框选择似乎丢失”,你的意思是“细节”(内容控制)没有反映正确的列表框选择或意味着列表框的选择栏根本不可见? – devuxer 2009-12-22 20:50:48

+0

假设我选择列表中的第三个项目,然后切换到另一个选项卡。当我切换回第一个选项卡时,列表框中没有选择任何项目。我希望第三项保持选中状态。 – user158485 2009-12-22 21:43:07

回答

2

根据您的评论,我猜想你的viewmodel中的东西正在改变,以删除选定的项目。你可以在SelectedDevice的setter上设置断点并检查调用堆栈吗?

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

要更全面地回答,我需要看到更多的代码。