Я пытаюсь реализовать виртуализацию данных в WPF AutoCompleteBox. Я нашел код Bea Stollnitz здесь, который отлично работает в ListView, и я сделал его для легко работать с ComboBox, но я никак не могу заставить его работать правильно с AutoCompleteBox.
Если быть точным, это работает — список виртуализируется, не все элементы загружаются при запуске — но, похоже, происходит то, что AutoCompleteBox выполняет итерацию по всем элементам в списке, как только изменяется ItemsSource, и это приводит к нарушению всего вещь (т. е. при загрузке запрашиваются все страницы в списке, поэтому, даже если они виртуализированы, все они будут запрошены в начале и загружены). Я предполагаю, что это из-за фильтрации, которую делает ACBox, но я удивлен, что нет способа предотвратить это, поскольку элемент управления обычно позволяет выполнять фильтрацию на стороне сервера с помощью события Populating.
Я чувствую, что что-то упускаю, я не могу поверить, что никто не делал что-то подобное раньше или что это невозможно сделать, поэтому я предполагаю, что просто делаю что-то явно неправильное, что я могу». не могу понять, так как я новичок в WPF.
Вот некоторые из вещей, которые я сделал, чтобы попытаться собрать это вместе (на основе поиска в Интернете похожих проблем):
Я убедился, что все условия для встроенной виртуализации пользовательского интерфейса в порядке, включая ее явное включение, установку максимальной высоты ListBox и т. д.
Я заменил ListBox в AutoCompleteBox на ListView, подобный тому, который Беа использует в своем примере. Наряду с этим ListView сам по себе работает, как и ожидалось, а встроенный в ACBox — нет.
Я пытался не использовать фильтрацию в ACBox, используя пользовательский фильтр, вручную обрабатывать события заполнения и т. д. Это не помогает. Создание пользовательского фильтра, очевидно, недостаточно, поскольку пользовательский фильтр позволяет указать только результат оценки одного элемента, код, который зацикливается на списке, не виден, поэтому вы не можете предотвратить зацикливание. Включение фильтра в None также ничего не делает.
Любые и все предложения приветствуются!
Целью для этого является .NET 3.5, и я использую набор инструментов WPF (выпуск от февраля 2010 г.)
Спасибо!