Skip to content

Começando a trabalhar com o MessagingCenter no Xamarin.Forms

Olá pessoal! Tudo bem? Depois de estudarmos toda a parte teórica do MessagingCenter no Xamarin.Forms, vamos começar a entender o conceito na prática, aplicando um exemplo bem simples de comunicação de baixo acoplamento.

Como sempre, fique à vontade para baixar o código fonte deste artigo para estudos.

O app deste artigo apresenta apenas uma tela com dois botões. Um deles será usado para enviar as mensagens via MessagingCenter e o outro será usado para receber as mensagens enviadas.

Aplicando de forma prática os conceitos explicados teoricamente, se clicarmos no botão de envio de mensagens sem que nenhum Subscriber seja ativado, a mensagem simplesmente se perde, sem prejuízo à estabilidade do sistema.

<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>

Vamos agora entender o que acontece no método EnviarMensagem_Clicked, ativado no clique do botão para enviar a mensagem via MessagingCenter – sabemos que pecisamos usar o método estático MessagingCenter.Send. Em sua forma de uso mais simples, este método requer apenas dois parâmetros: o objeto que está enviando a mensagem e a identificação da mensagem – sempre um string.

No primeiro parâmetro, digitamos o valor this, o que indica que o próprio objeto que estamos no momento (é uma MainPage) é o Publisher. E no segundo parâmetro, digitamos "msg" para identificar a mensagem.

private void EnviarMensagem_Clicked(object sender, EventArgs e)
{
    MessagingCenter.Send(this, "msg");
}

Agora vamos entender o funcionamento do método ReceberMensagem_Clicked, que cadastra o Subscriber. Como explicado anteriormente, usamos o método MessagingCenter.Subscribe para o cadastro de Subscribers. Só que este método precisa ser configurado de forma saber qual tipo de objeto será enviado as mensagens.

Ora, sabemos que a mensagem é enviada por um objeto do tipo MainPage, configuramos desta forma. Portanto, precisamos configurar o método de Subscribe como MessagingCenter.Subscribe<MainPage>.

Quando usamos o método, precisamos passar, pelo menos, três parâmetros. O primeiro é o objeto que será responsável pelo recebimento da mensagem (neste caso, é o objeto que estamos, this). Logo depois a identificação a mensagem que será recebida (e já sabemos que é msg). Por último, a Action que será executada quando a mensagem for recebida.

Este Subscriber está configurado para ouvir e reagir às mensagens enviadas por uma MainPage (configurada na declaração) com a identificação "msg". Quando isso acontecer, a MainPage que enviou a mensagem é passada como parâmetro para a Action que é executada quando a mensagem é recebida.

Neste exemplo, não estamos usando o parâmetro na Action, apenas disparando um alerta via DisplayAlert.

private void ReceberMensagem_Clicked(object sender, EventArgs e)
{
    MessagingCenter.Subscribe<MainPage>(this, "msg", async page =>
    {
        await DisplayAlert("Atenção", "mensagem recebida", "Ok");
    });
}

E este é o resultado:


E conseguimos fazer a implementação básica do MessagingCenter no Xamarin.Forms. Nos próximos artigos, vamos nos aprofundar neste assunto. Até a próxima!

[]’s
Paulo Roberto

Published inC#MobileXamarinXaml