2012-06-25 87 views
4

我有一個WPF窗體,其中包含30x30網格,其中每個網格單元格是ComboBox。組合框值和選定值從DataContext開始綁定。問題是它變得非常緩慢。我修改了表單,使其顯示文本框而不是組合框(並且TextBox在鼠標輸入時轉換爲ComboBox),現在它立即工作。1000 combobox binding

爲什麼組合框太慢?有什麼方法可以改進ComboBoxes的大規模綁定嗎?

+2

你使用虛擬ComboBox? (有關示例,請參閱文章[UI虛擬化](http://bea.stollnitz.com/blog/?p=338))。 – 2012-06-25 06:09:04

回答

5

ComboBox不使用默認的虛擬化(VirtualizingStackPanel),你可以改變一個非常簡單的方式使用控制面板:

<ComboBox ItemsSource="{Binding}"> 
    <ComboBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <VirtualizingStackPanel /> 
     </ItemsPanelTemplate> 
    </ComboBox.ItemsPanel> 
</ComboBox> 

編號:Improving Combobox Performance through UI Virtualization

這有很大幫助如果ComboBox擁有數千個項目,可以提高性能,但不確定它會對您的情況有多大幫助,因爲擁有1000個組合框對於UI來說非常重要。

您也可以嘗試將這些組合框置於虛擬化面板中(如ListBox或直接使用VirtualizedStackpanel)。

您可以嘗試的另一件事是使您的ComboBoxItemSource綁定異步使用IsAsync屬性。

我希望您使用ObservableCollection作爲您的ItemSource;