Cómo implementar la navegación / redirección condicional para una aplicación de Windows Universal en MVVM WAY

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

Pregunta

Tengo una aplicación universal de Windows que implica iniciar sesión. Un escenario típico con este tipo de aplicación es diferentes estados. Por ejemplo, si el usuario aún está para iniciar sesión por primera vez o si el usuario ya ha iniciado sesión antes y simplemente reabriendo la aplicación nuevamente. Dependiendo del estado aquí están las acciones

iflogedin - Mostrar página de inicio || IfNotloggedin - Mostrar inicio de sesión

Ahora basado en la condición (estado) tenemos que mostrar diferentes páginas.

Mi pregunta es similar a > Esto pero quería entender cómo implementar lo mismo en MVVM y cuál es el lugar correcto para poner esta lógica condicional.

Ponerlo en App.XAML.CS resolverá el problema, pero arruina su App.XAML.CS y viola el MVVM porque ViewModel no está manejando la lógica de interacción.

La solución que probé es

  1. Crear una página intermedia (intermedio.xaml).
  2. Crear ViewModel correspondiente (intermediaViewmodel.cs) para lo anterior.
  3. en el constructor de este ViewModel incorpora la declaración condicional para decidir qué página navegar.
  4. Supongamos que tengo mi condición en la variable de Bool Isloggedin. ¿Dónde poner el cheque condicional?

    El código en mi intermediadevalmodel es el siguiente

    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");
        }
    }
    

    El problema con esta solución es ahora que tiene una página más (intermedia.xaml) en su backstack. ¿Hay alguna manera de deshacerse de esto?

    este y soluciones similares no parecen ser relevantes para las aplicaciones de Windows Universal (Windows 8.1 / Windows Phone 8.1).

    ¿Alguien sabe cómo implementar esto de la manera correcta con MVVM?

¿Fue útil?

Solución

Bueno, en este caso, MVVM no se mantiene, porque esto debería suceder antes de que se seleccione una vista.¿Por qué no creas una clase ('Navigator' o lo que sea) que contiene su lógica y proporciona una propiedad ('InitialPage') que utiliza en la aplicación (en lugar de la página inicial codificada) para navegar a la primera página?De esta manera, mantiene su lógica fuera de la clase de la aplicación, y hay poca modificación para hacerlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top