Виртуализация данных в Windows Phone 7: пример

В Windows Phone ListBox поддерживает виртуализацию данных, что означает, что он может загружать только необходимые данные, а не все. Питер Торр объясняет интерфейс, который вам нужно реализовать.

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

Мой вопрос: как вы на самом деле реализуете это?

Моя идея состоит в том, чтобы создать один файл, содержащий список (целочисленного) индекса и (целочисленного) идентификатора, а также файл для каждого объекта, содержащего фактические данные. Это не кажется очень элегантной идеей, но я не могу придумать ничего лучше, а вы?

ОБНОВЛЕНИЕ

Кажется, мой вопрос некорректен. Когда я говорю, что пример Питера Торра «довольно глуп», я не говорю, что он сделал что-то неправильное; его целью было просто объяснить, какой интерфейс вам нужно реализовать. Практическая реализация будет зависеть от конкретных данных.

Я спрашиваю, какие у меня есть варианты для реализации этого? Должен ли я просто помещать данные в веб-службу и каждый раз запрашивать их (конечно, с локальным кешем), создавать базу данных, создавать файл для хранения индексов и один для данных? Есть ли решение, достаточно хорошее в каждом случае? Каковы недостатки и преимущества каждого выбора?


person Community    schedule 22.10.2010    source источник
comment
К вашему сведению, похоже, ваш вопрос не о виртуализации, а о том, как хранить данные на устройстве. Если это так, вы можете перефразировать его.   -  person Curt Nichols    schedule 22.10.2010


Ответы (2)


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

person Matt Lacey    schedule 22.10.2010
comment
На самом деле нет, он показывает, как реализовать необходимый интерфейс, но не как получить фактические данные. В его примере this[] возвращает элемент с бессмысленными данными. В реальном сценарии вам нужны реальные данные. - person ; 22.10.2010
comment
ну, это потому, что пример не знает, что вы хотите сделать, чтобы получить ваши данные. Вот тут-то и появляется вы. - person John Gardner; 23.10.2010

Чего еще ты хочешь? Общая идея заключается в том, что ListBox будет вызывать ваш IList, когда ему нужны данные. он запросит элемент по определенному индексу, и вы вернете объект. затем он, предположительно, вызывает ToString() для этого объекта и отображает результат в списке.

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

person ctacke    schedule 22.10.2010