2010-01-05 84 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