我試圖將大型集合綁定到ComboBox,並在打開ComboBox彈出窗口時遇到性能問題。我搜索了互聯網,發現使用VirtualizingStackPanel作爲項目面板模板可能會有所幫助,但它只能部分幫助。如果我將大集合綁定到ComboBox,我可以非常快速地打開彈出窗口,沒關係,但如果在此之後將另一個集合綁定到ComboBox並嘗試再次打開彈出窗口,則會變得非常緩慢。如果您打開空的ComboBox的彈出窗口,然後綁定大集合並嘗試再次打開彈出窗口,彈出窗口打開前需要幾秒鐘,這種情況也會發生。通過綁定大型集合WPF組合框性能問題
這裏是XAML:
<ComboBox Name="cbBlah">
<ComboBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</ComboBox.ItemsPanel>
</ComboBox>
,並結合重現問題的示例代碼:
var list = new List<string>();
for (var i = 0; i < new Random().Next(9000, 10000); i++)
list.Add(i.ToString());
cbBlah.ItemsSource = list;
我試圖讓虛擬化堆棧面板看起來像這樣:
<VirtualizingStackPanel VirtualizingStackPanel.IsVirtualizing="True" VirtualizingStackPanel.VirtualizationMode="Recycling" />
但它並沒有幫助,似乎VirtualizationMode被忽略,所以popup只有第一次打開速度非常快,然後,每次綁定更改後,它都非常慢。
UPDATE:我想過每次都不綁定新的集合,而是綁定一次ObservableCollection,然後只是改變它的內容。同樣的事情,只要收集的內容改變,打開一個彈出仍然需要幾秒鐘:(
看一看這些問題,我回答http://stackoverflow.com/a/8555403/920384 – punker76