Как стать автором
Поиск
Написать публикацию
Обновить

WPF: Медленная загрузка ComboBox при большом количестве элементов

Проблема


Как то, приделывая очередное окно в моей программе, пришлось вставить мне ComboBox, сбиндованный с довольно большим количеством элементов (где-то 1500). Неожиданно оказалось, что список открывается с существенной задержкой (5 — 10 секунд, а иногда и дольше). Поскольку все грузилось из памяти, то пенять на сеть не было причин.

Решение


Что оказалось: ребята из MS забыли включить виртуализацию при скроллировании, и в результате, для каждого элемента генерировался ComboBoxItem, что занимало время (ну, и оперативку, соответственно).

Чтобы справиться с этой проблемой, я использовал <VirtualizingStackPanel> — эта панель сделала всю работу за меня :-)

В результате, код стал выглядеть примерно так:

<ComboBox
Name="MyComboBox"
SelectedValue="{Binding MyID}"
ItemTemplate="{StaticResource MyComboBoxItemTemplate}">
<ComboBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</ComboBox.ItemsPanel>
</ComboBox>

Послесловие


Проблему описал (на английском) у себя на блоге, прежде всего чтобы самому не забыть. Ну, а поскольку захотелось мне регистрацию на хабре получить, так и на русский перевел… Глядишь, кому пригодится…
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.