Как реализовать условную навигацию / перенаправить для Windows Universal App в MVVM.

StackOverflow https://stackoverflow.com//questions/25053625

Вопрос

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

ifloggedin - показать домашнюю страницу || Ifnotloggedin - показать loginpage

Теперь, основываясь на условиях (состояние), мы должны показывать разные страницы.

Мой вопрос похож на Это но я хотел понять, как реализовать то же самое в MVVM и какое правильное место для положения этой условной логики.

Положить его в app.xaml.cs, решит проблему, но испортил ваше приложение .xaml.cs и нарушает MVVM, потому что ViewModel не обрабатывает логику взаимодействия.

решение, которое я пробовал, это

  1. Создать промежуточную страницу (Intermediate.xaml).
  2. Создать соответствующую программу ViewModel (IntermediateviewModel.cs) для вышесказанного.
  3. в конструкторе этой просмотра model включает в себя условное утверждение, чтобы решить, какую страницу навигации.
  4. Давайте предположим, что у меня есть состояние в переменной 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?

Это было полезно?

Решение

Ну, в этом случае mvvm не удерживает, потому что это должно произойти до того, как выбран вид.Почему бы вам не создавать класс («Navigator» или что-либо еще), содержащее вашу логику, и предоставление свойства («InitialPage»), которое вы используете в приложении (вместо жесткой законной начальной страницы), чтобы перейти на первую страницу?Таким образом, вы держите свою логику за пределами класса App, и есть небольшая модификация для этого.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top