Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Painel
titleSolicitação de Navegação

O .NET MAUI fornece várias maneiras de navegar em um aplicativo. A maneira tradicional de navegar é com aclasse NavigationPage, que implementa uma experiência de navegação hierárquica na qual o usuário pode navegar pelas páginas, para frente e para trás, conforme desejar. No aplicativo MinhaQualidadeMaui foi implementado ocomponente Shell como contêiner raiz e um host de navegação. 

A navegação é realizada dentro das classes ViewModel invocando um dosmétodos NavigateToAsync, especificando o caminho da rota para a página que está sendo navegada, conforme demonstrado no exemplo de código a seguir:

Bloco de código
languagec#
themeRDark
titleC#
await _navigationService.NavigateToAsync("QRCodePage");

Clique para acessar o arquivo

O exemplo de código a seguir mostra ométodo NavigateToAsync fornecido pelaclasse MauiNavigationService:

Bloco de código
languagec#
themeRDark
titleC#
public Task NavigateToAsync(string route, IDictionary<string, object> routeParameters = null)
{
  var shellNavigation = new ShellNavigationState(route);

  return routeParameters != null
      ? Shell.Current.GoToAsync(shellNavigation, true, routeParameters)
      : Shell.Current.GoToAsync(shellNavigation, true);
}

Clique para acessar o arquivo

O controle Shell já está familiarizado com a navegação baseada em rota, portanto, ométodo NavigateToAsync funciona para mascarar essa funcionalidade. Ométodo NavigateToAsync permite que os dados de navegação sejam especificados como um argumento que é passado para o ViewModel que está sendo navegado, onde normalmente é usado para executar a inicialização.

Painel
titlePassando Parâmetros

Ométodo NavigateToAsync, especificado pelainterface INavigationService, permite que os dados de navegação sejam especificados como um IDictionary<string, object> dos dados que são passados ​​para o ViewModel que está sendo navegado, onde normalmente é usado para executar a inicialização.

Por exemplo, aclasse LoginViewModel contém umConfigurationCommand que é executado quando o usuário clica no botão de configuração napágina RMSLoginPage. Por sua vez, isso executa ométodo OnConfigurate_ClickedAsync, que é mostrado no seguinte exemplo de código:

Bloco de código
languagec#
themeRDark
titleC#
protected override async void OnConfigurate_ClickedAsync()
{
  bool isExBase = CheckIsExBase();
  if (!isExBase)
  {
    await _navigationService.NavigateToAsync("ReconfigPage", 
      new Dictionary<string, object> { { "IsBaseExemplo", isExBase } });
  }
  ...
}

Clique para acessar o arquivo

Este método invoca a navegação para arota ReconfigPage, passando a propriedade IsBaseExemplo como parâmetro.

OReconfigViewModel possui um atributo adicionado a ele que permite receber dados do serviço de navegação, conforme mostrado no exemplo de código abaixo.

Bloco de código
languagec#
themeRDark
titleC#
[QueryProperty(nameof(IsBaseExemplo), "IsBaseExemplo")]
public class ReconfigViewModel : RMSReconfigViewModel
{
  public bool IsBaseExemplo
  {
    set => CanBackup = !value && !string.IsNullOrEmpty(App.GetContexto().User);
  }
...
}

Clique para acessar o arquivo

Oatributo QueryProperty nos permite fornecer um parâmetro para uma propriedade para mapear valores e uma chave para localizar valores do dicionário de parâmetros de consulta. Neste exemplo, a chave "IsBaseExemplo" e o valor dela foram fornecidos durante achamada NavigateToAsync. O ViewModel encontrou a chave "IsBaseExemplo" e mapeou o valor para apropriedade IsBaseExemplo.