2011-06-26 2 views
0

Есть ли способ просто переключаться между разными видами, используя ту же модель вида?MVVM-Light WP7 - просмотр подкачки на виртуальной машине или доступ к предыдущей виртуальной машине вместо перехода к параметрам querystring?

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

Основываясь на примерах, которые я нашел до сих пор, я использую навигационную службу для переключения между представлениями, передачи в ID в URI, чтобы целевая ВМ знала, какую запись нужно загрузить.

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

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

Поскольку виртуальная машина практически идентична между видами, кажется, имеет смысл просто менять представления, а не сохранять/перезагружать объект на основе идентификаторов.

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

Напомним: 1) Могу ли я поменять местами на виртуальной машине с перемещением без потери контекста данных?

или 2) Могу ли я получить доступ к предыдущей виртуальной машине при переходе к событию?

Обновление: Подробнее ->) Из образца MIX11 Deep Dive Navigation - получить виртуальную машину из SimpleIOC, используя идентификатор передается на навигационный запрос в качестве ключа и установить DataContext к нему. Это похоже на сохранение/извлечение объекта данных в хранилище и извлечение его на основе ключа. Это находится в обработчике событий OnNavigated на целевой странице.

ответ

0

Многим представлениям не нужны отдельные экземпляры ViewModel, вы вполне можете использовать один и тот же ViewModel (например, одноэлементный) между несколькими видами. Тем не менее, вы должны знать, что изменение свойств этого общего ViewModel влияет на другие виды.

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

Так вопросы:

  1. Вам придется перейти к View, но это может быть связано с одноплодной ViewModel.

  2. Хорошо, если все ваши модели ViewModels являются одиночными, вы можете. Но ты хочешь этого? Лично я думаю, что тогда лучше разделить модель.

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