Domanda

Ho un'app universale di Windows che coinvolge il login. Uno scenario tipico con questo tipo di applicazione è diversi stati. Ad esempio se l'utente deve ancora accedere per la prima volta o che l'utente abbia già effettuato l'accesso prima e semplicemente riaprire nuovamente l'app. A seconda dello stato qui sono le azioni

IflogGedin - Mostra la homepage ||. IFNOTLOGGEDIN - Mostra loginPage

Ora in base alla condizione (stato) dobbiamo mostrare pagine diverse.

La mia domanda è simile a Questo ma volevo capire come implementare lo stesso in MVVM e qual è il posto giusto per mettere questa logica condizionata.

Metterlo in app.Xaml.cs risolverà il problema ma caserisce la tua app.Xaml.cs e viola il MVVM perché ViewModel non mantiene la logica di interazione.

La soluzione che ho provato è

    .
  1. Crea una pagina intermedia (intermediate.xaml).
  2. Crea un viewmodel corrispondente (intermediarioviewmodel.cs) per quanto sopra.
  3. Nel costruttore di questo mirino incorpora la dichiarazione condizionale per decidere quale pagina navigare.
  4. Assumiamo che io abbia la mia condizione nella variabile BOOL isloggedin. Dove mettere il controllo condizionale?

    Il codice nel mio IntermediaReviewModel è il seguente

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

    Il problema con questa soluzione è ora hai un'altra pagina (intermediate.xaml) nel tuo backstack. C'è un modo per sbarazzarsi di questo?

    Questo e soluzioni simili non sembrano essere più rilevanti per le app universali di Windows (Windows 8.1 / Windows Phone 8.1).

    Qualcuno sa come implementarlo nel modo giusto con MVVM?

È stato utile?

Soluzione

Bene, in questo caso MVVM non si tiene perché questo dovrebbe accadere prima che venga selezionata una vista.Perché non crei una classe ('Navigator' o qualsiasi altra cosa) contenente la tua logica e fornendo una proprietà ('InitialPage') che si utilizza nell'app (invece della pagina iniziale codificata rigida) per navigare verso la prima pagina?In questo modo mantieni la tua logica al di fuori della classe dell'app, e ci sono poche modifiche da fare ad esso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top