Olá pessoal! Tudo bem? Vamos então continuar falando sobre o MessagingCenter do Xamarin.Forms. Depois de aprendermos como aplicar o MessagingCenter de forma básica, vamos aprender como funciona a passagem básica de parâmetros entre o Publisher e o Subscriber.
Como sempre, fique à vontade para baixar o código fonte deste artigo para estudos.
Novamente, vamos criar uma interface bem simples para nosso app de exemplo, com apenas dois botões – um para ativar o Publisher e outro para o Subscriber.
<StackLayout VerticalOptions="Center" HorizontalOptions="Center"> <Button Text="Enviar mensagem via MessagingCenter (Publisher)" Clicked="EnviarMensagem_Clicked" /> <Button Text="Receber mensagem via MessagingCenter (Subscriber)" Clicked="ReceberMensagem_Clicked" /> </StackLayout>
Antes de trabalharmos no MessagingCenter, vamos criar uma propriedade pública ou acesso de escrita privado para armazenar data. É esta propriedade que vamos usar no exemplo da passagem básica de parâmetros.
public DateTime DataDeEnvioDaMensagem { get; private set; }
No método EnviarMensagem_Clicked
, que estamos usando para enviar mensagens via MessagingCenter, adicionamos um valor na propriedade DataDeEnvioDaMensagem
e enviamos a mensagem.
Mais uma vez, estamos fazendo que com que um objeto do tipo MainPage
envie a mensagem com a identificação "msg"
– e como estamos fazendo que a própria MainPage
que estamos trabalhando seja o objeto que envia a mensagem (já que estamos usando this
como primeiro parâmetro), a atribuição de DataDeEnvioDaMensagem
é passada pelo MessagingCenter.
private void EnviarMensagem_Clicked(object sender, EventArgs e) { DataDeEnvioDaMensagem = DateTime.Now; MessagingCenter.Send(this, "msg"); }
No método ReceberMensagem_Clicked
, vamos usar a forma MessagingCenter.Subscribe
, para que mensagens enviadas por qualquer objeto do tipo MainPage
possam ser captadas. Só que não é só qualquer tipo de mensagem, é qualquer mensagem que tenha a identificação "msg"
.
Como já explicado no artigo anterior, o último parâmetro do método Subscribe
é a Action
que será executada quando a mensagem for recebida. Pois bem, o primeiro parâmetro desta Action
é sempre o objeto que disparou a mensagem.
Neste caso, como é uma MainPage
que disparou a mensagem, o parâmetro page
(que pode ter qualquer outro nome) é uma MainPage
. E como nós configuramos a propriedade DataDeEnvioDaMensagem
antes de enviar a mensagem, este mesmo valor pode ser resgatado e usado dentro da Action
. Veja o código:
private void ReceberMensagem_Clicked(object sender, EventArgs e) { MessagingCenter.Subscribe<MainPage>(this, "msg", async page => { await DisplayAlert("Atenção", $"mensagem recebida às {page.DataDeEnvioDaMensagem:HH:mm:ss}", "Ok"); }); }
Veja o resultado:


E aprendemos como o próprio objeto que dispara a mensagem via MessagingCenter pode ser obtido e usado pelos Subscribers. Até a próxima!
[]’s
Paulo Roberto