2010-01-05 90 views
2

我有一個tabcontrol綁定到一個可觀察的選項卡集合。WPF TabControl開關行爲

tabcontrol始終擁有第一個選項卡,該選項卡託管綁定到另一個可觀察集合的listview。

在選擇該列表視圖中的項目時,會創建一個新選項卡,併爲其指定焦點。

我遇到的問題是:

  1. 當我切換回所述第一接線片有一個停頓,同時它重繪/創建列表視圖項目(包含圖像如此之慢)

  2. 的移到新選項卡之前選擇的項目不再選擇。相反,listview在頂部沒有選擇任何項目。

有人能向我解釋一下tabcontrol是如何運作的,它是否真的每次都會破壞標籤項內容?以及當我返回到該選項卡時,我可以改爲具有該項目保持選定狀態的行爲?

更新:

我已經加入調試消息打印到沒有事件觸發此開關,來回,但第一個選項卡正在卸載事件證實了 - 更具體地說是在該選項卡舉辦的用戶控件??。

回答

0

首先,我需要保證我的列表視圖綁定到我的收藏正確,即項目留了下來通過添加屬性選擇:

IsSynchronizedWithCurrentItem="True" 

我加入加載事件處理程序的列表視圖這樣的項目滾動到視圖在切換回:

private void ListView_Loaded(object sender, RoutedEventArgs e) 
{ 
    ICollectionView collectionView = CollectionViewSource.GetDefaultView(DataContext); 
    if (collectionView != null) 
    { 
     ItemControl.ScrollIntoView(collectionView.CurrentItem); 
    } 
} 
0

聽起來像ObservableCollection是罪魁禍首。如果要更改集合項以控制顯示,那麼每次集合更改時都不會重新繪製整個選項卡集合?

相反,爲什麼不直接維護TabItem集合?然後,您可以管理TabItems的Visibility屬性以顯示它們或不顯示它們。

+0

如果這是我想在第一時間我回去我就看到了問題的情況下,但是從第一次沒有第二次及以後切換到第二個選項卡因爲收藏是不變的? – Oliver 2010-01-05 18:26:19