WP7 Listbox, как показать больше элементов

Я знаю, что ListBox в Windows Phone 7 по умолчанию использует VirtualizingStackPanel для оптимизации памяти.

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

Моя модель представления реализует IList

Эта проблема встречается во многих статьях, например это руководство

Как это исправить?


person onmyway133    schedule 12.11.2012    source источник


Ответы (1)


Реализуете ли вы модель просмотра INotifyPropertyChanged и вызывать событие PropertyChanged при добавлении дополнительных элементов?

Лучшим решением является привязка свойства модели представления к НаблюдаемаяСборка. Этот класс автоматически вызывает событие PropertyChanged при добавлении или удалении элементов из коллекции.

person trydis    schedule 13.11.2012
comment
Я уже использовал INotifyPropertyChanged, я слышал, что загрузка большего количества элементов виртуализируется, как мы можем это исправить? - person onmyway133; 14.11.2012
comment
Вы можете обработать событие CleanUpVirtualizedItemEvent (msdn.microsoft.com/en-us/library/) и Отменить повторную виртуализацию. Вы также можете посмотреть настройку VirtualizationMode (msdn.microsoft.com/en-us/library/) для повторного использования. - person trydis; 14.11.2012
comment
зачем отменять повторную виртуализацию? как отменить? Если я добавлю больше элементов в свою модель представления, список продолжит виртуализацию или сломает ее? - person onmyway133; 14.11.2012
comment
Я немного смущен. Вы говорите, что реализовали INotifyPropertyChanged. Работало ли это так, как ожидалось, при добавлении новых элементов, без необходимости прокручивать вверх, а затем вниз при добавлении элементов и вызове события PropertyChanged? И вы просто обеспокоены тем, что виртуализация не работает должным образом? - person trydis; 14.11.2012
comment
когда я использовал ObservableCollection в качестве источника привязки, добавляя дополнительные элементы в эту коллекцию, я вижу, что потребление памяти увеличилось, что означает, что виртуализация пользовательского интерфейса не работает. Итак, я создал класс, который реализует IList и INotifyPropertyChanged, памяти не так много, как раньше, но я должен прокручивать вверх, а затем вниз, чтобы увидеть новые элементы :( - person onmyway133; 14.11.2012
comment
Когда вы реализовали INotifyPropertyChanged, не забыли ли вы вызвать событие PropertyChanged (с правильным именем свойства) после добавления новых элементов в список? Кроме того, вы уверены, что увеличение использования памяти связано с отсутствием виртуализации, а не с тем, что вы добавляете дополнительные элементы в список и т. д.? - person trydis; 14.11.2012