O X do Xamarin Forms — MVVM Helpers

Fala galera,
beleza?
Geralmente quando criamos um projeto Xamarin.Forms (sem algum framawork especifico, Prism, MVVMCross e etc…) acabamos implementando algumas classes chaves para ajudar em nosso projeto.
Uma delas é uma BaseViewModel , por exemplo, para não ficarmos repetindo código geralmente criamos uma com as implementações do INotifyPropertyChanged.
Se você não quer utilizar um framework, e prefere utilizar o Xamarin.Forms "Vanilla", então lhe apresento o mvvm-helpers !
Mvvm-Helpers foi criado pelo James Montemagno (Homem dos Plugins) para simplificar e ajudar os projetos Xamarin.Forms que utilizam MVVM ( se você não utiliza inclusive , deve ter uma morte bem dolorosa…).
Configurando o Pacote
Simplesmente, devemos baixar o pacote no nuget Refractored.MvvmHelpers :

Instale apenas no projeto compartilhado. Pronto, Não requer mais configurações :D
Utilizando o MVVM-Helpers
É aqui que podemos ver as implementações do pacote.
Para ajudar nosso exemplo, criei um service fake para obter algumas informações :
Vamos criar uma Model simples de Usuario, nela criaremos Nome, Email e uma propriedade para ordenação :
Ele devera utilizar a classe ObservableObject . A ObservableObject implementa o INotifyPropertyChanged , alem da implementação do SetProperty :

Em seguida vamos Implementar nossa ViewModel:
Note que nossa ViewModel esta utilizando a classe BaseViewModel, esta por sua vez alem de implementar ObservableObject vem com diversas propriedades para utilizarmos : Title, SubTitle, Icon, IsBusy, IsNotBusy, CanLoadMore.
Veja que na minha implementação eu utilizo o IsBusy para avisar que estou efetuando alguma ação. Isto ficara mais claro na View.
Duas implementações bacanas são :
ObservableRangeCollection : Possui os métodos AddRange, RemoveRange, Replace, e ReplaceRange. Com eles é possível inserir e alterar a coleção inteira, sem a necessidade de um foreach por exemplo.
Grouping : Utilizando ele é possível agrupar o conteúdo da ObservableRangeCollection com uma variável por exemplo. Note que criei um método Agrupar() e utilizo a propriedade NomeAgrupado para ordenar a lista .
Finalmente para vermos tudo em ação, vamos implementar nossa View :
Rodando!

Uma Mão na roda né?
Existe também uma extensão para as Tasks, adicionando a possibilidade de timeout :

Ajuda também :)
Dica: se não quiser utilizar o MVVM.Helpers mas quiser esta extensão para Task pode utilizar meu pacote : Xamarin.Helpers.
Para finalizar, eu gosto de utilizar frameworks sempre que possível (Prism,mvvm cross e etc). Acredito que ajuda muito em algumas funções básicas que temos que implementar na mão.
Masssss, o Xamarin.Forms puro também tem suas vantagens.. Qual ? Você sabe o que esta acontecendo no código inteiro ;).
Caso queira baixar o código utilizado no Exemplo: Clique aqui.
Quer ver outros artigos sobre Xamarin ? Clique aqui.
Espero ter ajudado!
Aquele abraço!