Xamarin.Forms
MessagingCenter
Buscar..
Introducción
Xamarin.Forms tiene un mecanismo de mensajería incorporado para promover el código desacoplado. De esta manera, los modelos de visualización y otros componentes no necesitan conocerse entre sí. Pueden comunicarse por un simple contrato de mensajería.
Hay básicamente dos ingredientes principales para usar el MessagingCenter
.
Suscribir escuche los mensajes con cierta firma (el contrato) y ejecute el código cuando reciba un mensaje. Un mensaje puede tener múltiples suscriptores.
Enviar enviando un mensaje para que los suscriptores actúen.
Ejemplo simple
Aquí veremos un ejemplo simple del uso de MessagingCenter en Xamarin.Forms.
Primero, echemos un vistazo a la suscripción a un mensaje. En el modelo FooMessaging
nos suscribimos a un mensaje que viene de la MainPage
. El mensaje debe ser "Hola" y cuando lo recibimos, registramos un controlador que establece la propiedad Greeting
. Por último, this
significa que la instancia actual de FooMessaging
está registrando para este mensaje.
public class FooMessaging
{
public string Greeting { get; set; }
public FooMessaging()
{
MessagingCenter.Subscribe<MainPage> (this, "Hi", (sender) => {
this.Greeting = "Hi there!";
});
}
}
Para enviar un mensaje que active esta funcionalidad, necesitamos tener una página llamada MainPage
e implementar un código como el de abajo.
public class MainPage : Page
{
private void OnButtonClick(object sender, EventArgs args)
{
MessagingCenter.Send<MainPage> (this, "Hi");
}
}
En nuestra MainPage
tenemos un botón con un controlador que envía un mensaje. this
debería ser una instancia de MainPage
.
Pasando argumentos
También puede pasar argumentos con un mensaje para trabajar.
Usaremos las clasificadas de nuestro ejemplo anterior y las ampliaremos. En la parte receptora, justo detrás de la llamada al método Subscribe
, agregue el tipo de argumento que espera. Asegúrese también de declarar los argumentos en la firma del controlador.
public class FooMessaging
{
public string Greeting { get; set; }
public FooMessaging()
{
MessagingCenter.Subscribe<MainPage, string> (this, "Hi", (sender, arg) => {
this.Greeting = arg;
});
}
}
Al enviar un mensaje, asegúrese de incluir el valor del argumento. Además, aquí agrega el tipo justo detrás del método de Send
y agrega el valor del argumento.
public class MainPage : Page
{
private void OnButtonClick(object sender, EventArgs args)
{
MessagingCenter.Send<MainPage, string> (this, "Hi", "Hi there!");
}
}
En este ejemplo, se utiliza una cadena simple, pero también puede usar cualquier otro tipo de objetos (complejos).
Darse de baja
Cuando ya no necesite recibir mensajes, simplemente puede darse de baja. Puedes hacerlo así:
MessagingCenter.Unsubscribe<MainPage> (this, "Hi");
Cuando está proporcionando argumentos, debe darse de baja de la firma completa, como esto:
MessagingCenter.Unsubscribe<MainPage, string> (this, "Hi");