2009-12-22 134 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 = {}代碼並查看它在更改標籤時是否保持選中狀態?

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

相關問題