Проблема
Как то, приделывая очередное окно в моей программе, пришлось вставить мне ComboBox, сбиндованный с довольно большим количеством элементов (где-то 1500). Неожиданно оказалось, что список открывается с существенной задержкой (5 — 10 секунд, а иногда и дольше). Поскольку все грузилось из памяти, то пенять на сеть не было причин.
Решение
Что оказалось: ребята из MS забыли включить виртуализацию при скроллировании, и в результате, для каждого элемента генерировался ComboBoxItem, что занимало время (ну, и оперативку, соответственно).
Чтобы справиться с этой проблемой, я использовал <VirtualizingStackPanel> — эта панель сделала всю работу за меня :-)
В результате, код стал выглядеть примерно так:
<ComboBox
Name="MyComboBox"
SelectedValue="{Binding MyID}"
ItemTemplate="{StaticResource MyComboBoxItemTemplate}">
<ComboBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</ComboBox.ItemsPanel>
</ComboBox>
Послесловие
Проблему описал (на английском) у себя на блоге, прежде всего чтобы самому не забыть. Ну, а поскольку захотелось мне регистрацию на хабре получить, так и на русский перевел… Глядишь, кому пригодится…