Как передать объект Model (для которого выполняется привязка данных в представлении) между двумя представлениями в MVVM - PullRequest
2 голосов
/ 01 июля 2010

Я создаю прототип приложения для Windows Phone 7 в Silverlight.Я пытаюсь использовать шаблон MVVM в моем приложении.У меня следующая ситуация:

Я перехожу из одного представления 1 (страницы) в другое представление 2 (страницы) с помощью метода NavigationService.Navigate ("uri of next page")быть переопределенным].По сути, View2 не инициализируется до тех пор, пока View1 не перейдет к нему.

Я привязал View1 и View2 к одной и той же ViewModel.Итак, приложение запускается - запускает View1 и ViewModel и получает десериализованный объект.При получении этого десериализованного объекта ViewModel отправляет сообщение View1 для перехода к View2 (который также привязан к тому же типу ViewModel, но к другому экземпляру).

Итак, мои вопросы: как я могу передать Объект из одного View1 в View2, когда View2 не контролируется / не создается View1 (View1 просто переходит на View2).Чисто.Я буду продолжать контролировать, чтобы редактировать его в соответствии с вашими комментариями.Спасибо

РЕДАКТИРОВАТЬ: По сути, я хотел бы один вид получить данные, которые я могу привязать к следующему виду.Я хотел бы перейти к следующему представлению в зависимости от типа объекта, который я получаю из http-запроса.Таким образом, если есть какая-либо ошибка, я останусь в текущем представлении (и не перейду к следующему представлению).

Ответы [ 2 ]

2 голосов
/ 01 июля 2010

Я бы определенно ознакомился с инструментарием Лорана Бюньона MVVM Light . Я сделал то, что вы описали здесь, используя его фреймворк, и он работает как чемпион! У него есть пошаговые руководства в его блоге , а также видео на канале 9 , которые помогут вам начать работу. У меня также есть серия блогов на WP7 , в которой рассказывается о наборе инструментов MVVM Light, и новый пост, который я почти готов опубликовать, выполняя именно то, о чем вы спрашиваете.

В основном вам нужно обратить внимание на инфраструктуру обмена сообщениями, которую предоставляет MVVM Light. С этой структурой ваш «исходный» ViewModel поместит сообщение на шину, которую «целевой» ViewModel прослушивает. Проверьте ссылки и дайте нам знать, если это работает для вас!

/ ск

0 голосов
/ 01 июля 2010

Если вы можете каким-либо образом ссылаться на общий объект с помощью строкового значения, то вы можете передать это строковое значение в качестве параметра в URL-адресе страницы View2 и извлечь его, используя NavigationContext.QueryString .

Итак, при навигации из View1:

string objectId = GetObjectId(sharedObject);
Uri uri = new Uri(
    string.Format("/View2.xaml?objectId={0}", objectId), UriKind.Relative);
NavigationService.Navigate(uri);

И в OnNavigatedTo () метод View2:

object sharedObject = null;
if (NavigationContext.QueryString.Contains("objectId"))
{
    sharedObject = GetObjectFromId(NavigationContext.QueryString["objectId"]);
}
if (sharedObject != null)
{
    // do some stuff with sharedObject
}

Теперь все, что вам нужно сделать, этореализовать методы GetObjectId () и GetObjectFromId ().:)

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