![]() |
![]() |
Neste artigo vamos aplicar os recursos do framework FreshMVVM em uma aplicação Xamarin Forms. |
No artigo anterior eu apresentei o framewok FreshMVVM e os seus principais recursos.
Veremos agora a aplicação dos recursos do FreshMVVM na prática em uma aplicação Xamarin Forms.
Como este é nosso primeiro contato com o FreshMVVM vamos criar um projeto bem simples para entender o seu funcionamento básico.
Então vamos lá...
recursos usados:
Criando um projeto Xamarin Forms no VS 2017
Abra o VS 2017 Community e clique em New Project e a seguir escolha Cross Platform -> Mobile App (Xamarin.Forms) e informe o nome XF_FreshMVVM:
A seguir selecione a Plataforma, eu marquei somente Android, e escolha a estratégia de compartilhamento que será .NET Standard.
![]() |
Clique no botão OK.
Pronto nosso projeto já esta criado. ( Atualmente(01/2019) a versão mais atual estável é a 3.5.0.16)
Vamos incluir agora a referência ao framework FreshMVVM em nosso projeto.
No menu Tools, clique em Nuget Package Manager e a seguir em Manage Nuget Packages for Solution;
Digite : FreshMVVM para localizar o pacote e a seguir marque o pacote e instale-o em todos os projetos:
Pronto ! agora já temos todos os recursos necessários nos projetos. Abaixo vemos a estrutura do projeto criado:
Para organizar o nosso projeto e seguir as convenções ditadas pelo FreshMVVM vamos criar duas pastas em nosso projeto via menu Project -> New Folder :
A seguir vamos mover a página MainPage para a pasta Pages.
Agora vamos criar uma outra página chamada DemoPage na pasta Pages via menu Project-> Add New Item e selecionando Xamarin Forms -> Content Page e informando DemoPage.xaml :
Agora seguindo a convenção do framework vamos criar duas páginas na pasta PageModels:
Usando a opção Project-> Add New Item e selecionando Xamarin Forms -> Content Page (C#) :
Ao final a estrutura do projeto deverá ficar conforme mostra a figura abaixo:
Temos agora que fazer um ajuste no código das páginas DemoPageModel e MainPageModel.
Elas devem possuir o mesmo namespace das páginas DemoPage e MainPage respectivamente e herdar da classe FreshBasePageModel.
A seguir vemos o código ajustado dessas páginas:
![]() |
![]() |
Não esqueça de alterar o namespaces nos arquivos DemoPage.xaml.cs e MainPage.xaml.cs também.
Vamos agora definir o código das páginas MainPage e DemoPage e a seguir das páginas MainPageModel e DemoPageModel respectivamente.
Definindo o código da MainPage e MainPageModel
Agora abra o arquivo MainPage.xaml e inclua as seguintes views usando um layout StackLayout:
<?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:XF_FreshMVVM" x:Class="XF_FreshMVVM.MainPage" Title="MainPage"> <StackLayout Orientation="Vertical"
VerticalOptions="CenterAndExpand"
HorizontalOptions="CenterAndExpand"
Margin="0,0,0,10">
<Label Text="{Binding MainPageLabel}"
VerticalOptions="Center"
HorizontalOptions="Center"/>
<Button Text="Ira para Demo Page"
VerticalOptions="Center"
HorizontalOptions="FillAndExpand"
Command="{Binding GotoDemoPageCommand}"/>
</StackLayout>
</ContentPage>
|
Nosso objetivo é exibir uma mensagem de texto na Label e definir um comando para navegar para a DemoPage.
Abra a página MainPageModel e inclua o seguinte código:
using
FreshMvvm; using System; using Xamarin.Forms;
namespace XF_FreshMVVM
string
_mainPageLabel = string.Empty;
public override void ReverseInit(object returnedData)
protected override void ViewIsAppearing(object sender, EventArgs
e)
protected override void ViewIsDisappearing(object sender,
EventArgs e)
public Command GotoDemoPageCommand |
Vamos entender o código :
1- Definimos a propriedade MainPageLabel
string
_mainPageLabel = string.Empty;
public string MainPageLabel
{
get
{
return _mainPageLabel;
}
set
{
if (_mainPageLabel != value)
{
_mainPageLabel = value;
RaisePropertyChanged(nameof(MainPageLabel));
}
}
}
Observe que
utilizamos RaisePropertyChanged ao invés de
OnPropertyChanged para indicar alteração no valor
da propriedade.
2- Usamos o método Init() para atribuir um valor ao
nosso objeto e ReverseInit() para quando ele for
recolhido:
public override void Init(object initData)
{
base.Init(initData);
MainPageLabel = "Bem-Vindo ao FreshMVVM!";
}
public override void ReverseInit(object returnedData)
{
base.ReverseInit(returnedData);
}
3- Os eventos ViewIsAppering() e ViewIsDisappearing() permitem tratar os eventos das páginas:
protected override void ViewIsAppearing(object sender, EventArgs e)
{
CoreMethods.DisplayAlert("Página esta
surgindo", "", "Ok");
base.ViewIsAppearing(sender, e);
}
protected override void ViewIsDisappearing(object sender, EventArgs e)
{
base.ViewIsDisappearing(sender, e);
}
4- Implementamos o comando GotoDemoPageCommand para navegar para a página DemoPageModel:
public Command GotoDemoPageCommand
{
get
{
return new Command(async () =>
{
await CoreMethods.PushPageModel<DemoPageModel>();
});
}
}
Note que usamos a propriedade CoreMethods e PushPageModel<> para navegar para a página DemoPageModel.
Definindo o código da DemoPage e DemoPageModel
Agora vamos definir o código da DemoPage.xaml usando um layout StackLayout e definindo a seguinte view:
<?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_FreshMVVM.Pages.DemoPage"
Title="DemoPage">
<ContentPage.Content>
<StackLayout Orientation="Vertical"
VerticalOptions="CenterAndExpand"
HorizontalOptions="CenterAndExpand">
<Button Text="Recolher Pagina"
VerticalOptions="Center"
HorizontalOptions="FillAndExpand"
Command="{Binding GoBackCommand}"/>
</StackLayout>
</ContentPage.Content>
</ContentPage>
|
Aqui temos apenas um Button para retonar à pagina inicial usando um Command que iremos implementar a seguir.
Na página DemoPageModel inclua o seguinte código:
using FreshMvvm;
using System;
using Xamarin.Forms;
namespace XF_FreshMVVM
{
public class DemoPageModel : FreshBasePageModel
{
public override void Init(object initData)
{
base.Init(initData);
}
public override void ReverseInit(object returnedData)
{
base.ReverseInit(returnedData);
}
protected override void ViewIsAppearing(object sender, EventArgs e)
{
base.ViewIsAppearing(sender, e);
}
protected override void ViewIsDisappearing(object sender, EventArgs e)
{
base.ViewIsDisappearing(sender, e);
}
public Command GoBackCommand
{
get
{
return new Command(async () =>
{
await CoreMethods.PopPageModel();
});
}
}
}
}
|
O código é praticamente o mesmo que o usando anteriormente e dispensa comentários.
Definindo a página principal e navegação inicial
Para
inicializar a navegação FreshMVVM precisamos definir a
MainPage usando o contâiner de navegação do framework usando o código a
seguir no arquivo App.cs :
var page
= FreshPageModelResolver.ResolvePageModel<MainPageModel>();
var navegacao = new FreshNavigationContainer(page);
MainPage = navegacao;
![]() |
Cabe destacar os métodos usados para realizar a navegação entre as páginas:
Executando o projeto iremos obter o seguinte resultado:
![]() |
Em outro artigo iremos criar uma aplicação mais funcional usando o FreshMVVM.
Pegue o código
do projeto compartilhado aqui :
XF_FreshMVVM.zip
"Combati o bom combate, acabei a carreira,
guardei a fé.
Desde agora, a coroa da justiça me está guardada, a qual o Senhor, justo juiz,
me dará naquele dia;
e não somente a mim, mas também a todos os que amarem a sua vinda. "
2
Timóteo 4:7,8
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 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a
Objetos com VB .NET
Xamarim - Desenvolvimento Multiplataforma com C# ... - Macoratti.net
Xamarin.Forms - Olá Mundo - Criando sua primeira ... - Macoratti.net
Xamarin.Forms - Olá Mundo - Anatomia da aplicação - Macoratti.net
NET - Apresentando o padrão Model-View-ViewModel - Macoratti.net
Xamarin Forms - MVVM - Macoratti.net
NET - O padrão MVVM (Model-View-ViewModel) revisitado - Macoratti
Xamarin Forms - MVVM - A interface ICommand - Macoratti.net
Padrão de Projeto - Aprendendo o padrão MVVM ... - Macoratti.net