Отображение в combobox большого количества данных WPF MSSQL

Ситуация такая: к комбобоксу прикручиваются данные с БД MSSQL с использованием Entity Framework. Сейчас данных относительно не так много (около 2 тыс строк), но при попытке открыть выпадающий список, приходится ждать 4-5 секунд, пока комбобокс отобразит данные. В комбобоксе работает поиск по тексту.

Данные прикручены к выпадающему списку таким образом:

myCB.ItemsSource = dB.Customers.OrderBy(i=>i.Name).ToList();

Не знаю, должно ли это было помочь (но не помогает:) в xaml прописаны свойства: VirtualizingStackPanel.VirtualizationMode="Recycling" VirtualizingStackPanel.IsVirtualizing="True"

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


Ответы (1 шт):

Автор решения: aepot

ComboBox использует по умолчнию обычную StackPanel. К ней не прикручиваются всякие примочки виртуализации.

Вот этой разметки достаточно, чтобы обеспечить эффективный рендер элементов комбобокса.

<ComboBox ItemsSource="{Binding Items}">
    <ComboBox.ItemsPanel>
        <ItemsPanelTemplate>
            <VirtualizingStackPanel/>
        </ItemsPanelTemplate>
    </ComboBox.ItemsPanel>
</ComboBox>

Атрибуты VirtualizingStackPanel.VirtualizationMode и VirtualizingStackPanel.IsVirtualizing не нужны.

Еще рекомендую данные грузить из базы асинхронно.

Items = await dB.Customers.OrderBy(i => i.Name).ToListAsync();

А так же стоит реализовать INotifyPropertyChanged и работать через Binding, а не прямое присваивание ItemsSource.

→ Ссылка