Поведение WPF TabControl Switch - PullRequest
       9

Поведение WPF TabControl Switch

2 голосов
/ 05 января 2010

У меня есть tabcontrol, который привязывается к наблюдаемой коллекции вкладок.

В tabcontrol всегда есть первая вкладка, в которой размещен вид списка, связанный с другой наблюдаемой коллекцией.

При выборе элемента в этом виде списка создается новая вкладка, которой присвоен фокус.

Проблема, с которой я столкнулся:

  1. Когда я переключаюсь на первую вкладку, возникает пауза, когда она перерисовывает / создает элементы списка (содержит изображения, которые очень медленные)

  2. Элемент, выбранный перед переходом на новую вкладку, не выбран.Вместо этого просмотр списка находится вверху без выбора элемента.

Может кто-нибудь объяснить мне, как работает tabcontrol, действительно ли он каждый раз портит содержимое элемента табуляции?и как я могу вместо этого иметь поведение, когда элемент остается выбранным, когда я возвращаюсь на эту вкладку?

Обновление:

Я подтвердил, добавив сообщения отладочной печати в событиячто никакие события не запускаются при этом переключении назад и вперед, но первая вкладка выгружается - более конкретно, usercontrol, размещенный на этой вкладке, - ??.

Ответы [ 2 ]

0 голосов
/ 11 января 2010

Сначала мне нужно было убедиться, что мой просмотр списка привязан к моей коллекции, т. Е. Элемент остался выбранным, добавив свойство:

IsSynchronizedWithCurrentItem="True"

Затем я добавил загруженный обработчик событий в просмотр списка, чтобы элемент прокручивался в представлении при переключении обратно:

private void ListView_Loaded(object sender, RoutedEventArgs e)
{
    ICollectionView collectionView = CollectionViewSource.GetDefaultView(DataContext);
    if (collectionView != null)
    {
        ItemControl.ScrollIntoView(collectionView.CurrentItem);
    }
}   
0 голосов
/ 05 января 2010

Похоже, что ObservableCollection является виновником. Если вы изменяете элементы коллекции для управления отображением, то при каждом изменении коллекции не будет ли перерисовываться вся коллекция вкладок?

Вместо этого, почему бы не поддерживать коллекцию TabItem напрямую? Затем вы можете управлять свойством Visibility элементов TabItems, отображать их или нет.

...