Здесь вопрос состоит из двух частей, но я думаю, что эти два предмета достаточно сплетены, чтобы гарантировать их совместное включение.
В нашем приложении у нас есть ListBox
, который заполнен тем, что может бытьбольшое количество предметов.Каждый из этих элементов отображается с довольно сложным шаблоном элемента.Это, безусловно, довольно сложно, и, хотя его потенциально можно немного сократить, я, вероятно, не смогу вынести огромную сумму.Элементы в ListBox
взяты из ListCollectionView
, который составлен из ObservableCollection<>
объектов для отображения.
У нас есть две проблемы.
Во-первых, когда мыперенастроить фильтры для ListCollectionView
и вызвать на нем Refresh
, в пользовательском интерфейсе наблюдается очень заметная блокировка на несколько секунд, пока он сносится и воссоздается, а ListBox
заполняется заново.Длительность этой блокировки, по-видимому, связана с количеством элементов, содержащихся в ListBox
, и является самой длинной, когда клиентская область ListBox
заполнена элементами.Мы уверены, что причиной блокировки является воссоздание шаблонов элементов.Я попытался включить виртуализацию, но это никак не повлияло на уменьшение или устранение замедления.Я также смотрю на некоторые другие оптимизации, такие как изучение наших привязок и изменение макетов.Есть ли способ избежать этой конкретной проблемы, ускорить ее или перенести в другой поток?(Я знаю, что последнее маловероятно, потому что рендеринг является однопоточным, но, возможно, есть какой-то обходной путь ...)
Второй относится к фильтрации на ListCollectionView
.Хотя в настоящее время это не проблема, мы думаем, что существует вероятность того, что фильтрация станет проблемой и вызовет заметную блокировку потока пользовательского интерфейса.Я работаю над уменьшением затрат на фильтрацию, но мне было интересно, есть ли метод для перемещения вызова Refresh на ListCollectionView
в другой поток?До сих пор ни одна из моих попыток не увенчалась успехом, по-видимому, потому что ListCollectionView
автоматически не направляет определенные события в правильный поток.
Указатели или объяснения любых известных или потенциальных решений этих двух проблем будуточень полезно.