FreshMvvm para Xamarin.Forms
Published: 2020-06-02 13:22:08

O FreshMvvm é um Framework [Mvvm](https://dev.to/alexandrefreire/padrao-mvvm-2a89) super leve projetado especificamente para o Xamarin.Forms. Ele foi projetado para ser fácil, simples e flexível.

## Como ele se compara a outras opções?
* É super leve e super simples
* Ele foi projetado especificamente para o Xamarin.
* Projetado para ser fácil de aprender e desenvolver (ótimo quando você não está pronto para o RxUI)

## Recursos
* Navegação PageModel para PageModel
* Ligação automática do BindingContext
* Ligação automática de eventos da página (por exemplo, appearing)
* Métodos básicos (com valores) no PageModel (init, reverseinit)
* Construído em contêiner COI
* Injeção de Construtor PageModel
* Métodos básicos disponíveis no Model, como Alert
* Tipos de navegação incorporados para SimpleNavigation, Tabbed e MasterDetail

## Navegação
A forma Primária de Navegação no FreshMvvm é PageModel para PageModel, essencialmente significa que nossas visualizações não têm idéia da Navegação.

Por exemplo, para navegar entre os modelos de página, use:
```c#
await CoreMethods.PushPageModel<QuotePageModel>(); // Pushes navigation stack
await CoreMethods.PushPageModel<QuotePageModel>(null, true); // Pushes a Modal
await CoreMethods.PushPageModel<QuotePageModel> (pm => pm.Quote = "Quote 23") // Pushes Navigation Stack and initializes the property 'Quote' with  value 'Quote 23'
```
O mecanismo de navegação no FreshMvvm é feito através de uma interface simples, com métodos para Push e Pop. Essencialmente, esses métodos podem controlar a navegação do aplicativo da maneira que desejar.
```c#
public interface IFreshNavigationService
{
	Task PushPage(Page page, FreshBasePageModel model, bool modal = false);
	Task PopPage(bool modal = false);
}
```
No PushPage e no PopPage, você pode fazer qualquer tipo de navegação que desejar, desde uma simples navegação até uma avançada navegação aninhada.

O Framework contém alguns contêineres de Navegação incorporados para os diferentes tipos de Navegação.

Navegação Básica - Integrada
```c#
var page = FreshPageModelResolver.ResolvePageModel<MainMenuPageModel> ();
var basicNavContainer = new FreshNavigationContainer (page);
MainPage = basicNavContainer;
```

Mestre Detalhe - incorporado
```c#
var masterDetailNav = new FreshMasterDetailNavigationContainer ();
masterDetailNav.Init ("Menu");
masterDetailNav.AddPage<ContactListPageModel> ("Contacts", null);
masterDetailNav.AddPage<QuoteListPageModel> ("Pages", null);
MainPage = masterDetailNav;
```

Navegação com guias - incorporado
```c#
var tabbedNavigation = new FreshTabbedNavigationContainer ();
tabbedNavigation.AddTab<ContactListPageModel> ("Contacts", null);
tabbedNavigation.AddTab<QuoteListPageModel> ("Pages", null);
MainPage = tabbedNavigation;
```

Utilizo bastante em meus projetos, por isso resolvi compartilhar aqui, para conhecer mais você pode acessar o repositório no GitHub https://github.com/rid00z/FreshMvvm lá tem mais informações de como implementar em seu projeto, garanto que isso deixa seu projeto Xamarin bem mais simples e limpo.

Vou deixar aqui um exemplo já implementado utilizando SideMenu:
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/7d29ijrlfx3bac09lhe1.PNG)
https://github.com/alexandrefreiref/Af.Xamarin.Forms-SideMenu-FreshMvvm