MVVM Em Ação — Prism Library ! EventAggregator

Thiago Bertuzzi
3 min readNov 11, 2019

Fala galera,

Tudo beleza?

Que o prism é meu framework MVVM favorito, a maioria sabe.

Mas o que muitos não sabem é que ele te ajuda a não utilizar o polemico MessagingCenter, que causa mais discussão que politica no brasil :P .

Antes de iniciar , se você não conhece o Prism eu sugiro a leitura desse artigo : MVVM Em Ação — Prism Library ! Configurando o Prism .

Vamos la!

Event Aggregator

O prism nos fornece um incrivel recurso chamado Event Aggregator (O agregador de eventos) . Com ele eu consigo que Métodos/Ações e etc se comuniquem entre si, sem possuir uma referencia direta.

Em termos simples, você vai ter um evento assinado em que quando seja disparado o "Assinante" receba a notificação. Fica mais facil com a imagem abaixo :

Fonte : https://prismlibrary.github.io/docs/event-aggregator.html

Mas então porque eu não uso o MessagingCenter ? Simples, com o EventAggregator eu consigo escolher qual Thread vai executar o evento. Ou seja , não fico socando tudo na thread principal.

Mas e como eu utilizo?

Vamos ver !

Utilizando o Event Aggregator

Recentemente participei de uma live no Canal.net sobre Polly com meus amigos MVPS Renato Groffe, Milton Câmara e Luiz Carlos Faria e utilizei o EventAggregator para me notificar das interações do Retry do Polly.

A implementação é muito simples :

Primeiro devemos criar um evento que sera utilizado para notificação :

o PubSubEvent recebe um object, ou seja , você pode definir qual o tipo da sua mensagem.

Em seguida para utilizar precisamos declarar a interface IEventAggregator, que o prism nos ajuda instanciando via injeção de dependencia . Em seguida implementar a chamada do Evento :

No meu caso, estou utilizando o _eventAggregator.GetEvent<MessageSentEvent>().Publish(mensagem); para enviar a mensagem, toda vez que o Polly fizer um retry .

Warning : Se quiser saber mais sobre Polly, sugiro o artigo Everybody say about Polly

Este Publish avisara quem estiver assinando o evento que uma mensagem foi enviada.

Na minha ViewModel eu preciso definir quem vai receber o evento:

Warning : Você não é obrigado a utilizar na ViewModel, apenas estou utilizando no exemplo. Os Eventos podem ser assinados onde você precisar.

Bem simples em? Agora toda vez que o retry do Polly for executado a tela vai ser atualizada :

É um exemplo simples, mas da para ver como o EventAggregator funciona.

Se você quiser ver o criador do Prism (Brian Lagunas) falando mais sobre EventAggregator (Em ingles) , abaixo tem um video do canal dele :

Caso queira ver Documentação oficial do EventAggregator no Prism : Clique Aqui.

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!

--

--

Thiago Bertuzzi

Microsoft MVP,Gamer, Desenvolvedor e apaixonado por tecnologia!