Переносимая библиотека классов: перейдите на страницу xaml

У меня есть переносимая библиотека классов с 3 проектами.

  • Проект общих занятий для Windows Phone и Windows планшета
  • Проект для Windows Phone
  • Проект для планшета Windows

В моем общем проекте у меня есть модель папки и модель представления папки. В моем проекте Windows Phone у меня есть представление папки.

Можно ли перейти на страницу xaml в папке просмотра проекта Windows Phone из класса в папке de viewmodel в общем проекте?

NavigationService.Navigate(); здесь не работает, и я не могу найти ни одного пакета nuget, который бы включал это.

Итак, мой вопрос:

  • Есть ли другой способ перейти на страницу xaml?
  • Или есть пакет nuget для добавления NavigationService в общий проект?

person Batsman    schedule 20.03.2013    source источник


Ответы (4)


Класс NavigationService недоступен в PCL. Вы можете убедиться в этом, просмотрев документацию на MSDN и щелкните раскрывающийся список «Другие версии».

Лучше использовать события. Скажем, ваш класс модели просмотра может иметь событие с именем NavigationRequested, которое вы вызываете вместо вызова NavigationService.Navigate(), и ваше представление подписывается на это событие примерно так:

ViewModel.NavigationRequested += (s, e) => NavigationService.Navigate(GetUrlFor(e.PageId));
person Impworks    schedule 20.03.2013
comment
Спасибо за быстрый ответ, буду пробовать - person Batsman; 20.03.2013

Я использовал http://azerdark.wordpress.com/2010/04/23/multi-page-application-in-wpf/ для нескольких проектов с несколькими страницами, это может быть полезно и для вас, надеюсь, это поможет.

person esertbas    schedule 20.03.2013
comment
Спасибо за быстрый ответ, буду пробовать - person Batsman; 20.03.2013

Вот пример, который в значительной степени показывает, как это сделать: Общий код: добавление NavigationService

Вот несколько источников более общей информации об использовании переносимых библиотек классов:

person Daniel Plaisted    schedule 20.03.2013

В MvvmCross мы осуществляем этот тип навигации, переходя к ViewModel, а не к View.

Работая таким образом, фреймворк перехватывает навигацию ViewModel и интерпретирует ее в зависимости от платформы, например:

  • в WindowsPhone используется URL-адрес Xaml
  • в WindowsStore он использует службу навигации
  • на Android он использует намерения

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

person Stuart    schedule 22.04.2013