1

Я делаю поисковое приложение в wp7. Данные каждой записи привязаны к пользовательскому элементу управления. Вместо этого я вводил бесконечную загрузку страниц. Поэтому, когда количество экземпляров UserControl увеличивается на экране, переход с одной страницы на другую (например, страницы предварительного просмотра или настроек) или возврат с этой страницы на текущую страницу замедляется. Я не могу изменить дизайн (концепция бесконечной загрузки).медленные переходы страниц из-за привязки данных

Каковы способы решения этого сценария? Как насчет изменения видимости элементов управления? И ссылка или предложение будут высоко оценены.

Note Я пометил WPF и Silverlight, потому что привязка происходит одинаково в них, ожидая, что те, кто столкнулся со сценариями, подобными этим.

EDIT Проверьте этот question, который задал я. Из-за наличия UserControl в списке, вертикальное смещение не поддерживается. Поэтому у меня не было другого варианта, кроме использования ItemsControl с scrollViewer вокруг него. ItemsControl содержит список из 5 - 6 пользовательских элементов управления, в которых у intern есть элементы управления внутри них, я думал, что виртуализация может не произойти в таких случаях. Я прав?

+2

VirtualizingStackPanel - ваш друг. –

ответ

2

В WPF это сделано Virtualization

Использование Virtualization, только один экземпляр (или несколько копий) из UserControl фактически будет создаваться, и переключение на другой пользовательский элемент управления на самом деле просто обменивает вне DataContext, что контроль связан с. На самом деле это не создает новый UserControl.

Например, если у вас есть VirtualizingStackPanel с 100 000 предметов, и только 10 видны за один раз, он будет отображать только 14 предметов (дополнительные элементы для буфера прокрутки). Когда вы прокручиваете, DataContext за этими 14 элементами управления изменяется, но сами элементы управления никогда не будут заменены. Напротив, обычный StackPanel фактически отобразит 100 000 предметов, когда он загрузится, что резко снизит производительность вашего приложения.

Этот вопрос о Virtualizing an ItemsControl может, вероятно, заставить вас двигаться в правильном направлении.

+0

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

+0

@Prakash 'ItemsControl' не виртуализирует свои объекты по умолчанию, однако ссылка, которую у меня есть в моем ответе, покажет вам, как вы можете сделать это виртуализированным. – Rachel

1

Посмотрите на this post, я считаю, что решение предоставлено Rico - это то, что вы ищете. :)

+0

Я не знаю, как это может помочь в этом случае. – Prakash

+0

Извините, я неправильно понял ваш вопрос, я подумал, что есть только одна кнопка «Добавить больше» ... Могу ли я спросить, почему вам нужно по одному на каждый пользовательский контроль? –

+0

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

Смежные вопросы