Перенаправление между представлениями в MVVM - PullRequest
2 голосов
/ 06 октября 2009

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

Например: У меня есть одна страница списка, на которой некоторые записи поступают из одной ViewModel, а другая - из другой ViewModel. Это означает, что у меня есть две ViewModel из моего единого View. А теперь я хочу отобразить другой вид по какому-либо событию.

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

Ответы [ 2 ]

2 голосов
/ 06 октября 2009

MVVM как шаблон предназначен для разделения задач, улучшения тестируемости вашего кода и т. Д., Поэтому ваша ViewModel должна only заботиться о применении бизнес-правил и предоставлении данных для вашего View.

Вам нужно будет использовать это в сочетании с каким-то шаблоном MVC, когда контроллер контролирует навигацию / состояние приложения и т. Д.

(редактировать) Например, представьте, что ваше приложение имеет экран входа в систему, поэтому вы создаете LoginView, которое содержит имя пользователя и пароль; вероятно кнопка ОК и кнопка Отмена.

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

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

Итак, если вы создаете класс Controller, вы можете: создать экземпляр класса LoginViewModel, а затем, в зависимости от результата входа в систему, применить бизнес-правила, необходимые для удаления LoginViewModel из области действия, и создать новую ViewModel (например, HomePageViewModel) ) и т.д ...

Наконец, вам необходимо сообщить приложению, какие представления использовать для каждой виртуальной машины с использованием DataTemplates

Есть куча других способов снять кожу с этой конкретной кошки, конечно ... это всего лишь одна идея ...

Пока сохраняется основная концепция: используйте MVVM, чтобы ликвидировать разрыв между View и Model чистым, тестируемым способом ... не пытайтесь сделать так, чтобы «один шаблон подходил всем»:)

HTH:)

0 голосов
/ 26 октября 2009

Я согласен с IanR использовать контроллер для рабочего процесса / навигации.

Пример ViewModel WPF Application Framework (WAF) показывает, как это можно сделать.

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