Отображение в 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 шт):
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.