Я пытаюсь заставить простой ListView работать при потенциальной загрузке тысяч элементов.Кажется, что лучший способ сделать это - использовать виртуализацию, особенно виртуализацию данных.Но я не могу заставить его работать, или я просто неправильно понимаю концепции.
У меня есть простой репозиторий, возвращающий классы POCO, подобные этому из Sqlite:
public async Task<IEnumerable<T>> FindAllAsync(Action<T> predicate);
Затем в XAML у меня есть что-то вроде этого:
<Style x:Key="VirtualisedMetroListView" BasedOn="{StaticResource MetroListView}" TargetType="{x:Type ListView}">
<Setter Property="ScrollViewer.CanContentScroll" Value="True" />
<Setter Property="ScrollViewer.IsDeferredScrollingEnabled" Value="True" />
<Setter Property="VirtualizingStackPanel.IsVirtualizing" Value="True" />
<Setter Property="VirtualizingStackPanel.VirtualizationMode" Value="Recycling" />
</Style>
Какой ListViewиспользует.Теперь я действительно ничего не знаю о VirtualizationStackPanel или MahApps VirtualisedMetroListView, потому что, особенно для последнего, очень мало документации.Но вышеупомянутая конструкция, кажется, работает для некоторых людей?
В любом случае, это не работает для меня, и, честно говоря, я не понимаю, почему это должно!Разве виртуализация данных не должна извлекать только то, что видно (запрошено) из ListView?Но как это будет работать для моего репозитория выше?Он всегда возвращает все элементы T. Не только 20 видимых в списке.
У кого-нибудь есть ссылки на рабочий пример этого?Или, может быть, терпение объяснить мне эту концепцию:)
Спасибо.