Проблема производительности комбинированного списка Silverlight - PullRequest
3 голосов
/ 08 июня 2010

У меня проблема с производительностью из-за переполненного списка (5000 предметов). Рендеринг выпадающего списка очень медленный (как будто он вычислял все элементов перед тем, как их отображать).

У вас есть какой-нибудь трюк, чтобы сделать этот выпадающий экран ленивым?

Код Xaml:

  <Grid x:Name="LayoutRoot">
        <StackPanel Orientation="Horizontal" Width="200" Height="20">
            <TextBlock>Test Combo </TextBlock>
            <ComboBox x:Name="fooCombo" Margin="5,0,0,0"></ComboBox>
        </StackPanel>
    </Grid>

код позади:

public MainPage () { InitializeComponent ();

    List<string> li = new List<string>();

    int Max = 5000;
    for (int i = 0; i < Max; ++i)
        li.Add("Item - " + i);

    fooCombo.ItemsSource = li;
}

Что ж, похоже, ошибка в виртуализации Combobox UI, так что автозаполнение должно быть способом.

Ответы [ 2 ]

6 голосов
/ 12 июня 2010

Если вам нужен фактический ComboBox (а не AutoCompleteBox), который сделал это, вы можете заменить ItemsTemplate на VirtualizingStackPanel. В вашем примере это будет выглядеть так:

<ComboBox x:Name="fooCombo" Margin="5,0,0,0">
    <ComboBox.ItemsPanel>
        <ItemsPanelTemplate>
            <VirtualizingStackPanel></VirtualizingStackPanel>
        </ItemsPanelTemplate>
    </ComboBox.ItemsPanel>
</ComboBox>

Тем не менее, в качестве руководства, я, вероятно, рассмотрю ваш сценарий использования, чтобы увидеть, является ли ComboBox правильным для вас контролем - поскольку 5000 элементов кажутся огромным лотом для выпадающего списка.

Кстати, в Silverlight ожидается медленное поведение, а не ошибка.

2 голосов
/ 08 июня 2010

Вместо этого используйте AutoCompleteBox, отрегулируйте количество символов, которое необходимо ввести перед заполнением раскрывающегося списка, чтобы ограничить количество выпадающих элементов одновременно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...