2013-01-03 90 views
1

我有一個包含數據網格的wpf表單。 datagrid中1列是組合框的類型。組合框的ItemsSource屬性中有1000個項目。因此,當單擊組合框(渲染問題,我相信)以外的箭頭時,需要花費大量的時間來顯示值。我們怎樣才能使組合框顯示物品更快,幾乎沒有滯後?wpf datagrid性能問題中的Combox列

+0

順便說一句,我問一個設計中,用戶必須通過滾動項目的1000年選擇一個項目,特別是如果它本身就是其中之一(正如我假設你使用的是數據網格一樣)。 –

回答

4

試着把它放到你的組合框上。而不是一次加載所有的項目,這應該使它在你查看它們時加載它們。

對於一個在數據網格中,我總是用一個DataGridTemplateColumn我的組合框列:

<DataGridTemplateColumn Header="My Combo Column"> 
     <DataGridTemplateColumn.CellTemplate> 
      <DataTemplate> 
       <ComboBox Margin="0" ItemsSource="{Binding Path=DataContext.MyCollection, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}" 
        SelectedItem="{Binding Path=Item.Property, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" > 
         <ComboBox.ItemsPanel> 
          <ItemsPanelTemplate> 
            <VirtualizingStackPanel Width=250 VirtualizingStackPanel.VirtualizationMode="Recycling" CanHorizontallyScroll="True"/> 
          </ItemsPanelTemplate> 
         </ComboBox.ItemsPanel> 
       </ComboBox> 
      </DataTemplate> 
     </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 
+0

給定的答案適用於組合框,但不適用於單元格類型是數據網格內的組合框。如果使用的控件是WPF組合框控件,它將起作用。我正在尋找的是datagrid中的celltype = combobox – Alice

+1

@Rohan - 您可以在DataGridComboBoxColumn中設置樣式中的ItemsPanel以使其工作。 –

+0

如果您使用DataGridTemplateColumn並將其DataTemplate更改爲組合框,則你可以使用我給出的例子。我會用xaml更新我的答案 – emybob