Смысл виртуализации в том, что пользовательский интерфейс может отображаться без необходимости изучения каждого элемента в коллекции, верно? Но желаемый результат зависит именно от этого: полоса прокрутки не может точно рассчитать размер большого пальца, не зная, сколько элементов видно, и для того, чтобы это сделать, необходимо посмотреть на каждый элемент. Когда у вас включена виртуализация, полоса прокрутки просматривает не каждый элемент, а просто использует количество элементов в коллекции в качестве оценки.
Что может быть лучше, чем сворачивать элементы, которые вы не хотите видеть, так это удалять их из источника элементов. Используйте CollectionView
и отфильтруйте элементы, у которых Visibility
равно Visibility.Collapsed
. Вы по-прежнему несете расходы на посещение каждого элемента в базовой коллекции, чтобы определить, должен ли он отображаться в представлении, но, вероятно, это будет немного быстрее, если это будет выполнено перед элементами в коллекции, которые фактически отображаются в пользовательском интерфейсе. 1006 *