Bind Combobox с огромными данными в WPF - PullRequest
3 голосов
/ 07 июля 2011

Я пытаюсь связать комбинированный список со списком пользовательских объектов. Мой список объектов содержит около 15 тыс. Записей, а после того, как щелкнуть по списку, в поле со списком уходит много времени.

Ниже приведен код:

<ComboBox Height="23" Name="comboBox1" Width="120" DisplayMemberPath="EmpName" SelectedValue="EmpID" VirtualizingStackPanel.IsVirtualizing="True" VirtualizingStackPanel.VirtualizationMode="Recycling"/>

код позади:

List<EmployeeBE> allEmployee = new List<EmployeeBE>();
allEmployee = EmployeeBO.GetEmployeeAll();
 comboBox1.ItemsSource = allEmployee;

allEmployee имеет около 15K записей. Кто-нибудь может Предложить, как я могу улучшить свою работу со списком?

Ответы [ 3 ]

5 голосов
/ 07 июля 2011

Это плохой дизайн пользовательского интерфейса: ни один пользователь не будет читать записи 15K.

Вы можете повысить производительность, разрешив пользователю вводить некоторые критерии фильтрации перед отображением результатов, например, используя AutoCompleteBox вместо ComboBox.

4 голосов
/ 07 июля 2011

Вы можете попробовать VirtualizingStackPanel, как описано здесь - http://vbcity.com/blogs/xtab/archive/2009/12/15/wpf-using-a-virtualizingstackpanel-to-improve-combobox-performance.aspx

Как уже говорили другие, вы действительно хотите переосмыслить свой пользовательский интерфейс, так как ComboBox не подходит для 15k записей.

0 голосов
/ 07 июля 2011

Попробуйте использовать VirtualizingStackPanel в качестве ItemsPanel для ComboBox.

<ItemsPanelTemplate x:Key="ComboBoxItemsPanelTemplate"> 
   <VirtualizingStackPanel/> 
</ItemsPanelTemplate>

<ComboBox ItemsPanel="{StaticResource ItemsTemplate}"/>
...