У меня есть представление списка с кучей данных, и каждый раз, когда я прокручиваю / нажимаю где-нибудь на экране, реакция всегда занимает несколько секунд.Я попытался настроить представление списка для использования виртуализации, но не могу заставить его работать.
Я пробовал это и это .Не уверен, что я делаю что-то не так или не понимаю, как работает виртуализация?
У меня есть много стилей / добавлено поведение вида сетки для моего списка.Если у Вас есть предложения, пожалуйста, дайте мне знать!
Что я пробовал
- Я попытался удалить CollapseableCollumnBehavior из представления списка.Без изменений.
- Удалены все мои стили шрифтов.Без изменений.
- Уменьшено количество столбцов.Произошло небольшое изменение, но оно все еще не отвечает.
- Выключено IsSyncronizedWithCurrentItem.Без изменений.
Источник предмета
Мой источник предметов - это просто наблюдаемая коллекция. Так я загружаю в него данные.
private void LoadAllData()
{
using (var uow = _unitOfWorkFactory.Create())
{
foreach (var rule in _ruleRepository.GetAllRulesInCheckProcess())
{
AllRulesInCheckProcess.Add(rule);
}
}
}
XAML:
Я вынул многие стили и добавил поведение столбцов из xaml для упрощения кода.
<ListView SelectedValue="{Binding SelectedRule}"
IsSynchronizedWithCurrentItem="True"
Grid.Column="0"
MinHeight="150"
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Recycling"
ScrollViewer.IsDeferredScrollingEnabled="True"
ItemsSource="{Binding AllRulesInCheckProcess}"
MaxHeight="300"
ScrollViewer.HorizontalScrollBarVisibility="Visible">
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding Description}" Width="auto">
<GridViewColumnHeader Content="Description">
<GridViewColumnHeader.ContentTemplate>
<DataTemplate>
<StackPanel>
<TextBox Height="25"
FontSize="{StaticResource FontSizeSmall}"
Text="{Binding ElementName=RulesInCheckProgressPage, Path=DataContext.DescriptionFilter}"
Tag="Filter Description"/>
<TextBlock Text="Description"/>
</StackPanel>
</DataTemplate>
</GridViewColumnHeader.ContentTemplate>
</GridViewColumnHeader>
</GridViewColumn>
<GridViewColumn DisplayMemberBinding="{Binding LaunchDate,StringFormat=MM/dd/yy}"
Width="auto">
<GridViewColumnHeader Content="Launch Date">
<GridViewColumnHeader.ContentTemplate>
<DataTemplate>
<StackPanel>
<TextBox Height="25"
FontSize="{StaticResource FontSizeSmall}"
Tag="Filter Launch Date"
Text="{Binding ElementName=RulesInCheckProgressPage, Path=DataContext.LaunchDateFilter}"/>
<TextBlock Text="Launch Date"/>
</StackPanel>
</DataTemplate>
</GridViewColumnHeader.ContentTemplate>
</GridViewColumnHeader>
</GridViewColumn>
<GridViewColumn DisplayMemberBinding="{Binding AddedDate,StringFormat=MM/dd/yy}" Width="auto">
<GridViewColumnHeader Content="Added Date">
<GridViewColumnHeader.ContentTemplate>
<DataTemplate>
<StackPanel>
<TextBox Height="25"
FontSize="{StaticResource FontSizeSmall}" Tag="Filter Added Date"
Text="{Binding ElementName=RulesInCheckProgressPage, Path=DataContext.AddedDateFilter}"/>
<TextBlock Text="Added Date"/>
</StackPanel>
</DataTemplate>
</GridViewColumnHeader.ContentTemplate>
</GridViewColumnHeader>
</GridViewColumn>
</GridView>
</ListView.View>
ОБНОВЛЕНИЕ
Так что, проведя еще несколько исследований, кажется, мне, возможно, придется взглянуть на виртуализацию данных вместо виртуализации пользовательского интерфейса.Кто-нибудь знает какой-либо современный код виртуализации данных?