Как заставить ListView изменить ItemControl на VirtualizingStackPanel во время выполнения

Итак, у меня есть элемент управления, производный от ListView, который на лету меняет Grouping и ItemsSource. Когда я группирую так, что полосы прокрутки исчезают, а затем меняю мой ItemsSource на другой ICollectionView, мои полосы прокрутки не возвращаются.

Основная проблема заключается в том, что ListView изменяется на VirtualizedStackPanel, когда группировка активирована, и не изменяется обратно, когда группировка деактивирована.

Я не против, что виртуализация отключается при группировании - это не проблема. Что мне нужно, так это способ заставить ListView регенерировать ItemPanel, когда я изменяю ItemSource.

1 ответ

Решение

Не могли бы вы добавить обработчик событий в событие SourceUpdated, а затем сбросить шаблон ItemsPanelTemplate в шаблон, определенный в ваших ресурсах?

Что-то вроде:

public MyWindow()
{
   InitializeComponent();

   MyListView.SourceUpdated += new EventHandler<DataTransferEventArgs>( OnSourceUpdated );
}

void OnSourceUpdated( object sender, DataTransferEventArgs e )
{
   MyListView.ItemsPanel = (ItemsPanelTemplate)Resources["MyItemsPanelTemplate"];
}
Другие вопросы по тегам