プロプログラマ

プログラマーを職業としてます。 Flex,Air,C#,Oracle,HTML+JSの言語ノウハウを中心に情報発信していきます

[WPF] ComboBoxにVirtualizingStackPanelを指定すると表示が爆速になる

WPFのComboBoxに大量のデータをバインドさせると、コンボボックスを開くときにかなり待たされます。2回目以降はだいぶましになりますがそれでも遅いです。
データ量が多いのだからしょうがないとあきらめ気味でしたが、VirtualizingStackPanelを指定すると描画がものすごく早くなることが分かりました。

Comboboxのリスト部にはStackPanelが指定されており、バインドされたデータをすべて描画しています。
そのため、特に初回の表示がデータ量に応じて時間がかかるということです。

このStackPanelをVirtualizingStackPanelに変更すると、現在表示している範囲のみ描画するため、件数に左右されず、すごく早くコンボボックスを開くことができます。

やり方は簡単で、
リソースとして、

<Window.Resources>
	<ItemsPanelTemplate x:Key="ComboboxItemTemplate">
		<VirtualizingStackPanel/>
	</ItemsPanelTemplate>
</Window.Resources>

を定義しておき、
Comboboxの定義で、

<ComboBox
	ItemsSource="{Binding TestList}" 
	ItemsPanel="{DynamicResource ComboboxItemTemplate}"
	DisplayMemberPath="ItemName"/>

ItemPanelにそのスタイルを指定するだけです。

これだけでコンボボックスの表示が速くなります。

4000件くらいのリストをバインドさせており、指定前は開くのに5秒くらいかかりましたが、変更後、一瞬で開くようになります。
VirtualizingStackPanelにはいろいろオプションもあるようなので、調整すればもっと効率的になるかもしれません。

DataGridやListBoxは最初からこれが指定されているようです。

指定することによる問題もあるかもしれません。
でも確実に早くなるので、一度お試しいただくと幸せになるかもしれません。

 

== ランキングに参加しています。ぜひクリックお願いします ==

プログラム ブログランキングへ
にほんブログ村 IT技術ブログへ
にほんブログ村

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください