65.9K
CodeProject is changing. Read more.
Home

WPF Databound ComboBox Performance

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.87/5 (6 votes)

Sep 24, 2007

CPOL

1 min read

viewsIcon

33711

downloadIcon

1320

Speeding up a databound ComboBox in WPF with Templates.

Slow ComboBoxes

By following the steps in this article, you will learn how to optimize a ComboBox with WPF and Vista.

What are the Issues?

The WPF ComboBox has two main issues. First, the ComboBox uses a StackPanel, and not a VirtualizingStackPanel, in the ItemsPanelTemplate. Second, the popup overrides the defaults and sets AllowsTransparency to true.

Why does it matter?

If a StackPanel is used instead of a VirtualizingStackPanel, all of the items in the combobox must be rendered before the popup can be shown. The VirtualizingStackPanel will only render what is shown. This only matters if the items are generated through databinding and there are over 100 items.

If AllowsTransparency is set to true, every pixel is calculated to test for transparency. This causes the scrolling on Vista Home Premium and above versions to lag. It is not a problem on XP or Vista Home Basic because they do not support transparency.

How to fix it?

Create a Template for the ComboBox and set AllowsTransparency to false.

<Popup Focusable="false" AllowsTransparency="false" ...

Create a Template for the ComboBox's ItemsPanel and change the StackPanel into a VirtualizingStackPanel.

<VirtualizingStackPanel IsItemsHost="True"/>

Please let me know if this article was helpful.