[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は最初からこれが指定されているようです。
指定することによる問題もあるかもしれません。
でも確実に早くなるので、一度お試しいただくと幸せになるかもしれません。
== ランキングに参加しています。ぜひクリックお願いします ==
[C#] LINQを使ったファイル一覧の取得方法 [LINQ][C#] 指定したファイル名の拡張子が想定した拡張子かを確認する