首页 文章

WPF TabControl切换行为

提问于
浏览
2

我有一个tabcontrol,它绑定到一个可观察的标签集合 .

tabcontrol始终具有第一个选项卡,该选项卡承载绑定到另一个可观察集合的列表视图 .

在选择该列表视图中的项目时,将创建一个新选项卡,并为其提供焦点 .

我遇到的问题是:

  • 当我切换回第一个标签时,在重绘/创建列表视图项目时会暂停一下(包含图像很慢)

  • 在移动到新选项卡之前选择的项目不再选中 . 相反,列表视图位于顶部,未选择任何项目 .

有人可以向我解释一下tabcontrol是如何运作的,它是否真的每次都会破坏标签项内容?以及当我返回到该标签时,我如何能够保持选择项目的行为?

Update:

我已经通过向事件中添加调试打印消息来确认,这些事件在此交换机上没有事件触发,但第一个选项卡正在卸载 - 更具体地说,该选项卡中托管的用户控件是?? .

2 回答

  • 0

    听起来像ObservableCollection是罪魁祸首 . 如果要更改集合项以控制显示,那么每次集合更改时都不会重绘整个选项卡集合?

    相反,为什么不直接维护TabItem集合?然后,您可以管理TabItems的Visibility属性以显示它们 .

  • 0

    首先,我需要确保我的listview正确绑定到我的集合,即通过添加属性保持选择项目:

    IsSynchronizedWithCurrentItem="True"
    

    然后我向listview添加了一个加载的事件处理程序,以便在切换回时将项目滚动到视图中:

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

相关问题