MVVM-Light WP7 - поменять представления на ВМ или получить доступ к предыдущей ВМ вместо навигации по параметрам строки запроса? - PullRequest
0 голосов
/ 27 июня 2011

Есть ли способ просто переключаться между разными видами, используя одну и ту же модель вида?

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

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

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

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

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

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

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

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

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

1 Ответ

0 голосов
/ 27 июня 2011

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

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

Итак, на ваши вопросы:

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

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

...