Pergunta

Eu tenho um Windows App Universal que envolve o Login.Um cenário típico com este tipo de aplicação é de diferentes estados.Por exemplo, se o usuário ainda está para login pela primeira vez ou tem o utilizador já registado no antes e só abrir o app novamente.Dependendo do estado, aqui estão as ações

IfLoggedIn - Mostra A Página Inicial || IfNotLoggedIn - Show LoginPage

Agora baseada na condição(estado) temos que mostrar a páginas diferentes.

A minha pergunta é semelhante a este mas eu queria entender como implementar o mesmo em MVVM e qual é o lugar certo para colocar esta lógica condicional.

Colocá-lo no aplicativo.xaml.cs vai resolver o problema, mas mexe-se o seu aplicativo.xaml.cs e viola o MVVM porque ViewModel não está a lidar com a lógica de interação.

A solução que eu tentei é

  1. Criar uma Página intermediária(Intermediate.xaml).
  2. Criar correspondente ViewModel(IntermediateViewModel.cs) acima.
  3. No construtor desta ViewModel incorporar a instrução condicional para decidir qual página para Navegar.

Vamos supor que eu tenha minha condição, a variável bool IsLoggedIn.Onde colocar a verificação condicional?

O código no meu IntermediateViewModel é da seguinte maneira

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

O problema com essa solução é que agora você tem mais uma página(Intermediário.xaml) em seu backstack.Existe uma maneira de se livrar de tudo isso?

Este e semelhante soluções não parecem ser relevantes para o Windows Universal Aplicativos(Windows 8.1/Windows Phone 8.1) mais.

Alguém sabe como implementar esta no caminho certo com MVVM?

Foi útil?

Solução

Bem, neste caso MVVM não segure, porque isso deve acontecer antes um modo de exibição é selecionado.Por que você não criar uma classe ('Navigator'ou seja o que for), contendo a sua lógica, e proporcionando uma propriedade ('InitialPage') que você usar o Aplicativo (em vez do hard-coded página inicial) para navegar para a primeira página ?Desta forma, você manter a sua lógica de fora da classe do Aplicativo, e há pouca modificação para fazer para ele.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top