Como implementar condicional de Navegação/Redirect para Windows App Universal em forma MVVM
-
21-12-2019 - |
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 é
- Criar uma Página intermediária(Intermediate.xaml).
- Criar correspondente ViewModel(IntermediateViewModel.cs) acima.
- 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?
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.