Перенаправление между представлениями в MVVM

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

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

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


person Community    schedule 06.10.2009    source источник


Ответы (2)


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

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

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

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

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

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

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

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

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

ХТХ :)

person kiwipom    schedule 06.10.2009
comment
Здесь вы смешиваете MVVM и MVC, это немного сбивает с толку. Не могли бы вы привести какой-то пример? - person ; 07.10.2009

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

Образец ViewModel для WPF Application Framework (WAF) показывает, как это может быть Выполнено.

person jbe    schedule 26.10.2009