Xamarin Forms - Passando informações entre páginas na navegação Hierárquica - II


  Neste artigo vou mostrar como passar informações entre as páginas de uma aplicação Xamarin Forms usando o VS 2015 e a linguagem C#: Passando objetos complexos entre páginas.

No artigo anterior apresentei os conceitos da navegação hierárquica no Xamarin Forms e como passar informações entre páginas.

Este artigo mostra como passar informações de objetos complexos entre páginas e neste caso, como no abordado no artigo anterior, podemos usar duas formas de passar informações:

Vamos ver na prática dada uma dessas abordagens.

Recursos usados:

Nota: Baixe e use a versão Community 2015 do VS ela é grátis e é equivalente a versão Professional.

Criando um projeto no VS 2015 com Xamarin

Abra o Visual Studio Community 2015 e clique em New Project;

Selecione Visual C#, o template Cross Plataform e a seguir Blank App (Xamarin.Forms Portable);

Informe o nome XF_Navegacao2 e clique no botão OK;

Ao clicar no botão OK, será criada uma solução contendo 4 projetos. (Dependendo do seu ambiente pode haver alguma variação nos projetos.)

O projeto comum(projeto Portable) possui a classe App.cs que irá conter o código compartilhado e que vamos usar neste artigo.

Criando a classe Contato

Vamos criar a classe Contato que será o nosso modelo de domínio e que conterá as informações que desejamos tratar.

No menu Project clique em Add Class e informe o nome Contato.

A seguirn inclua o código abaixo nesta classe:

    public class Contato
    {
        public string Nome { get; set; }
        public int Idade { get; set; }
        public string Cargo { get; set; }
        public string Pais { get; set; }
    }

Criando as páginas no projeto Portable

Vamos criar 2 páginas no projeto Portable :  Pagina1.xaml e Pagina2.xaml.

Selecione o projeto Portable e no menu Project clique em Add New Item;

Clique em Cross Platform e selecione Forms Xaml Page informando o nome Pagina1;

Repita o procedimento e crie a página Pagina2.xaml.

Antes de continuar abra o arquivo App.cs e defina página raiz da pilha de navegação:

   public App()
   {
        MainPage = new NavigationPage(new Pagina1());
   }

Na página Pagina1.xaml defina o seguinte código XAML :

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="XF_Navegacao2.Pagina1"
             Title="Página 1">
    <StackLayout>
            <Entry x:Name="txtNome" Placeholder="Informe o nome" />
            <Entry x:Name="txtIdade" Placeholder="Informe a idade" />
            <Entry x:Name="txtCargo" Placeholder="Informe o cargo" />
            <Entry x:Name="txtPais" Placeholder="Informe o país" />
            <Button x:Name="btnEnviar" Text="Enviar" Clicked="btnEnviar_Clicked" />
    </StackLayout>
</ContentPage>

Nesta página temos uma 4 views Entry definidas com o nome txtNome,txtIdade, txtCargo e txtPais onde o usuário vai informas as respectivas informações.

Temos também definido um evento Click do botão de comando btnEnviar_Clicked.

Passando informações para a outra página usando o BindingContext

Ao clicar no botão Avançar o evento Clicked será disparado e ele deverá navegar para página Pagina2 e passar as informações digitadas para essa página.

Para fazer isso inclua o evento Clicked, no arquivo code-behind Pagina1.xaml.cs o seguinte código:

      private async void btnEnviar_Clicked(object sender, EventArgs e)
        {
            var contato = new Contato
            {
                Nome = txtNome.Text,
                Idade = Convert.ToInt32(txtIdade.Text),
                Cargo = txtCargo.Text,
                Pais = txtPais.Text
            };
            var pagina2 = new Pagina2();
            pagina2.BindingContext = contato;
            await Navigation.PushAsync(pagina2);
        }

Observe que estamos criando uma instância da classe Contato e preenchendo os dados do objeto contato com as informações recebidas nas view Entry.

A seguir criamos uma instância da página Pagina2 e atribuímos ao seu BindingContext o objeto contato com as informções preenchidas.

A seguir usando o método PushAsync() navegamos para a página Pagina1.

Agora vamos definir o código da página Pagina2 inciando com o código XAML:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="XF_Navegacao2.Pagina2"
             Title="Página 2">
    <StackLayout HorizontalOptions="Center" VerticalOptions="Center">
        <StackLayout Orientation="Horizontal">
            <Label Text="Nome:" HorizontalOptions="FillAndExpand" />
            <Label Text="{Binding Nome}" FontSize="Medium" FontAttributes="Bold" />
            <Label Text="Cargo:" HorizontalOptions="FillAndExpand" />
            <Label Text="{Binding Cargo}" FontSize="Medium" FontAttributes="Bold" />
        </StackLayout>
        <StackLayout Orientation="Horizontal">
            <Label Text="Idade:" HorizontalOptions="FillAndExpand" />
            <Label Text="{Binding Idade}" FontSize="Medium" FontAttributes="Bold" />
            <Label Text="Pais:" HorizontalOptions="FillAndExpand" />
            <Label Text="{Binding Pais}" FontSize="Medium" FontAttributes="Bold" />
        </StackLayout>
    </StackLayout>
    
</ContentPage>

Nesta página estamos usando as informações do BindingContext e exibindo as informações na página.

Executando o projeto iremos obter:

Note que a propriedade Title das páginas define o título no cabeçalho da página e que o botão de retorno da Pagina2 é exibido permitindo ao usuário retornar à página anterior.

Poderíamos ter obtido o mesmo resultado passando as informações via construtor como fizemos no artigo anterior.

Pegue o código das páginas aqui: XF_Navegacao2.zip

Em outro artigo vou mostrar como passar informações entre a página Modal e a página que a chamou.

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti