WP7 Listbox, как работает виртуализация пользовательского интерфейса

Я использую ListBox, у которого есть VirtualizingStackPanel, который, как говорят, поддерживает виртуализацию пользовательского интерфейса по умолчанию.

Однако, когда я устанавливаю свой listStudent (типа ObservableCollection и в нем 5 студентов) как ItemsSource для моего Listbox. Затем всякий раз, когда пользователь прокручивает до конца, я добавляю еще 5 студентов в свой listStudent (и, конечно, пользовательский интерфейс получает уведомление). Но я вижу, что потребляемая память постоянно увеличивается. По памяти ничем не отличается от StackPanel

Как работает виртуализация пользовательского интерфейса? Как уменьшить объем памяти при добавлении нового элемента в listStudent?


person onmyway133    schedule 14.11.2012    source источник
comment
ОС предзагружает 3 размера экрана (?). Можете ли вы добавить больше учеников (например, 100), чтобы увидеть разницу?   -  person Ku6opr    schedule 14.11.2012
comment
@Ku6opr Я много раз добавляю 5 учеников, поэтому, когда мой listStudent.Count достигает 100, я прокручиваю вверх. Механизм виртуализации ListBox ДОЛЖЕН уничтожить те ListBoxItem, которые не отображаются на экране. Но это не так!!   -  person onmyway133    schedule 14.11.2012


Ответы (3)


виртуализация означает, что список не создает элементы списка, до которых вы еще не прокрутили.

так что вы можете поместить свой тестовый код в загруженную функцию элемента или использовать код конвертера. вы можете увидеть, работает ли виртуализация

Например

вы можете привязать конвертер к реквизиту имени студента, и вы можете зарегистрировать его. Тогда вы узнаете, когда элемент действительно создается

person MengMeng    schedule 15.11.2012

Убедитесь, что вы не изменили ListBox ItemsPanel, разрушающую виртуализацию пользовательского интерфейса.

person Ku6opr    schedule 15.11.2012

Sheldon_Xiao указал на некоторые ссылки на MSDN, которые полезно объяснить виртуализацию пользовательского интерфейса

person onmyway133    schedule 20.11.2012