Список WPF и большой объем данных

#c# #wpf #listbox

#c# #wpf #список

Вопрос:

Мне нужно отобразить большой объем данных (тысячи элементов) в ListBox, однако это занимает некоторое время, и пользовательский интерфейс не реагирует, пока все элементы не будут отображены в ListBox.

ItemsSource списка привязан к CollectionView.

Я знаю преимущества использования VirtualizingStackPanel, но я настаиваю на использовании WrapPanel.

Я поискал в Интернете и нашел несколько VirtualizedWrapPanels, но у них та же проблема, которая заключается в том, что они не позволяют VirtualizingWrapPanel увеличиваться до любого размера, который ему нравится, и я должен установить для них ширину и высоту.

Теперь мне нужно знать, какие еще варианты существуют для выполнения этой работы? Что я могу сделать, чтобы список загружался и отображал этот большой объем быстро.

Пожалуйста, дайте мне знать, если я не объяснил свою проблему четко. Любая помощь приветствуется. Заранее спасибо.

Редактировать

Это соответствующий код

     public ObservableCollection<T> Items
    {
        get { return _items; }
        set
        {
            if (_items == value)
                return;

            _items = value;
            OnPropertyChanged(() => Items);
        }
    }
  

Я создаю экземпляр ObservableColelction в методе loadData ViewModel

    _items = _service.Select();
  

и экземпляр CollectionView создается таким образом

     ICollectionView cv = new CollectionViewSource() { Source = Items }.View;
  

и xaml-код списка

             <ListBox
                x:Name="Items"
                ItemsSource="{Binding CollectionView}"
                Padding="10,10,10,10"
                SelectionMode="Single"
                VerticalAlignment="Top"
                IsSynchronizedWithCurrentItem="True">

                <ListBox.ItemsPanel>
                    <ItemsPanelTemplate>
                        <WrapPanel Orientation="Vertical" Height="480" />
                    </ItemsPanelTemplate>
                </ListBox.ItemsPanel>

            </ListBox>
  

Комментарии:

1. Опубликуйте соответствующий код.

2. VirtualizingWrapPanel .

3. Я обновил сообщение соответствующим кодом @HighCodr

4. Я использовал VirtualizingWrapPanel @Sinatr, однако он возвращает исключение «не должен возвращать PositiveInfinity в качестве желаемого размера».

Ответ №1:

Я не уверен, применимо ли это или вы ищете это, однако виртуализация данных — это еще одно решение, которое вы можете рассмотреть. есть несколько очень хороших сообщений, описывающих это. эти 2 блога / поста кажутся очень хорошими. Пожалуйста, взгляните сюда[http://www.codeproject.com/Articles/34405/WPF-Data-Virtualization ] и здесь[http://www.zagstudio.com/blog/498#.U7a6OvldV1F ].