Производительность с помощью WPF Combo Box внутри ListView - PullRequest
1 голос
/ 02 мая 2011

Мне было интересно, упустил ли я что-то очевидное.

У меня есть простое окно с ListView с 3 столбцами в нем. Один отображает текст, а два других имеют поля со списком.

ListView имеет ок. 500 записей и комбинированные списки извлекают из одного списка контактов, который имеет ок. 8000 записей в нем.

Я использую MVVM.

Это окно открывается вечно, и как только оно открывается, оно практически замерзает (оно движется очень медленно)

запросы к базе данных занимают менее десяти секунд (я регистрирую, когда виртуальная машина полностью загружена), затем требуется две или три минуты, чтобы открыть окно. Я удостоверился, что оба списка хранятся в List<T> на моей виртуальной машине, чтобы не обрабатывать данные или что-либо подобное.

Как вы можете видеть ниже. Я явно пытался использовать Virtualization Stack Panel, но это не сильно помогло.

Спасибо за любую помощь

        <DataTemplate x:Key="ComboboxItemTemplate">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
            </Grid.RowDefinitions>
            <Image Grid.RowSpan="3" Source="{Binding ImageURL, IsAsync=True}" Width="50" />
            <TextBlock Grid.Column="1" Text="{Binding Name}" />
            <TextBlock Grid.Column="1" Grid.Row="1" Text="{Binding Email}" />
            <TextBlock Grid.Column="1" Grid.Row="2" Text="{Binding CampusName}" />
        </Grid>
    </DataTemplate>
    <ListView ItemsSource="{Binding MainList}" IsSynchronizedWithCurrentItem="True" Grid.RowSpan="2">
        <ListView.ItemsPanel>
            <ItemsPanelTemplate>
                <VirtualizingStackPanel />
            </ItemsPanelTemplate>
        </ListView.ItemsPanel>
        <ListView.View>
            <GridView>
                <GridViewColumn Width="200" Header="Internal">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <StackPanel>
                                <TextBlock Text="{Binding Name}" FontWeight="Bold" />
                                <TextBlock Text="{Binding MName}" />
                                <TextBlock Text="{Binding CampusName}" />
                            </StackPanel>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn Width="200" Header="Contact1">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <ComboBox ItemsSource="{Binding Source={StaticResource VM}, Path=ContactList, IsAsync=True}" SelectedValue="{Binding HisContactID}" SelectedValuePath="id" ItemTemplate="{StaticResource ComboboxItemTemplate}" Background="{Binding HisColor}" Margin="0,82,0,115" Grid.Row="1" Grid.Column="1">
                                <ComboBox.ItemsPanel>
                                    <ItemsPanelTemplate>
                                        <VirtualizingStackPanel />
                                    </ItemsPanelTemplate>
                                </ComboBox.ItemsPanel>
                            </ComboBox>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn Width="200" Header="Contact2">
                ...
                </GridViewColumn>
            </GridView>
        </ListView.View>
    </ListView>

1 Ответ

0 голосов
/ 21 ноября 2013

У меня была та же проблема, и в конце концов я понял это ...

Бывает, что ListView был вложен в Infragistic TabControl и каждый раз, когда что-то связывалось внутри ListView (то есть: ComboBoxes), "SelectionChange "из TabControl срабатывал, вызывая задержку ...

Я также тестировал с родным Microsft TabControl, и я получил то же самое поведение, но несколько более производительный.

Я решил проблему, проверив SelectionChangedEventArgs ... убедившись, что e.AddedItems содержит только "TabItem" (а не ComboBox) перед обработкой.

Надеюсь, это поможет,

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