Как заставить 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"];
}