Как реализовать условную навигацию / перенаправить для Windows Universal App в MVVM.
-
21-12-2019 - |
Вопрос
У меня есть Windows Universal App, которое включает в себя вход. Типичный сценарий с таким приложением является разные состояния. Например, еще ли пользователь еще впервые войти в систему или пользователь уже вошел в систему до и просто снова открывает приложение. В зависимости от состояния вот действия
ifloggedin - показать домашнюю страницу || Ifnotloggedin - показать loginpage
Теперь, основываясь на условиях (состояние), мы должны показывать разные страницы.
Мой вопрос похож на Это но я хотел понять, как реализовать то же самое в MVVM и какое правильное место для положения этой условной логики.
Положить его в app.xaml.cs, решит проблему, но испортил ваше приложение .xaml.cs и нарушает MVVM, потому что ViewModel не обрабатывает логику взаимодействия.
решение, которое я пробовал, это
- Создать промежуточную страницу (Intermediate.xaml).
- Создать соответствующую программу ViewModel (IntermediateviewModel.cs) для вышесказанного.
- в конструкторе этой просмотра model включает в себя условное утверждение, чтобы решить, какую страницу навигации.
Давайте предположим, что у меня есть состояние в переменной Bool Isloggedin. Где поставить условный чек?
Код в моей IntermediateViewModel выглядит следующим образом
public bool IsLoggedIn {get; set;}
//IsLoggedIn contains the condition of whether the user is logged-in or not-logged-in
public IntermediateViewModel()
{
if (IsLoggedIn == false)
{
NavigationService.Navigate("LoginPage");
}
else if (IsLoggedIn == true)
{
NavigationService.Navigate("HomePage");
}
}
.
Проблема с этим решением теперь у вас есть еще одна страница (Intermediate.xaml) в вашем блоке. Есть ли способ избавиться от этого?
Это И подобные решения не имеют отношения к Windows Universal Apps (Windows 8.1 / Windows Phone 8.1) больше.
Решение
Ну, в этом случае mvvm не удерживает, потому что это должно произойти до того, как выбран вид.Почему бы вам не создавать класс («Navigator
» или что-либо еще), содержащее вашу логику, и предоставление свойства («InitialPage
»), которое вы используете в приложении (вместо жесткой законной начальной страницы), чтобы перейти на первую страницу?Таким образом, вы держите свою логику за пределами класса App, и есть небольшая модификация для этого.