Xamarin.Forms
MessagingCenter
Sök…
Introduktion
Xamarin.Forms har en inbyggd meddelandemekanism för att främja avkopplad kod. På detta sätt behöver visningsmodeller och andra komponenter inte känna varandra. De kan kommunicera med ett enkelt meddelandekontrakt.
Det finns i princip två huvudingredienser för att använda MessagingCenter
.
Prenumerera ; lyssna efter meddelanden med en viss signatur (kontraktet) och köra kod när ett meddelande tas emot. Ett meddelande kan ha flera prenumeranter.
Skicka ; skicka ett meddelande för prenumeranter att agera på.
Enkelt exempel
Här ser vi ett enkelt exempel på att använda MessagingCenter i Xamarin.Forms.
Låt oss först titta på prenumerationen på ett meddelande. I FooMessaging
modellen prenumererar vi ett meddelande från MainPage
. Meddelandet ska vara "Hej" och när vi får det registrerar vi en hanterare som ställer in fastigheten Greeting
. Slutligen this
innebär det aktuella FooMessaging
instans registrerar för detta meddelande.
public class FooMessaging
{
public string Greeting { get; set; }
public FooMessaging()
{
MessagingCenter.Subscribe<MainPage> (this, "Hi", (sender) => {
this.Greeting = "Hi there!";
});
}
}
För att skicka ett meddelande som utlöser denna funktionalitet, måste vi ha en sida som heter MainPage
och implementera kod som under.
public class MainPage : Page
{
private void OnButtonClick(object sender, EventArgs args)
{
MessagingCenter.Send<MainPage> (this, "Hi");
}
}
På vår MainPage
vi en knapp med en hanterare som skickar ett meddelande. this
bör vara ett exempel på MainPage
.
Skickar argument
Du kan också skicka argument med ett meddelande att arbeta med.
Vi kommer att använda klassade från vårt tidigare exempel och utöka dem. I den mottagande delen, precis bakom Subscribe
, lägg till typen av argument du förväntar dig. Se också till att du också förklarar argumenten i hanterarens signatur.
public class FooMessaging
{
public string Greeting { get; set; }
public FooMessaging()
{
MessagingCenter.Subscribe<MainPage, string> (this, "Hi", (sender, arg) => {
this.Greeting = arg;
});
}
}
När du skickar ett meddelande, se till att inkludera argumentvärdet. Här lägger du till typen direkt bakom Send
metoden och lägger till argumentvärdet.
public class MainPage : Page
{
private void OnButtonClick(object sender, EventArgs args)
{
MessagingCenter.Send<MainPage, string> (this, "Hi", "Hi there!");
}
}
I det här exemplet används en enkel sträng, men du kan också använda alla andra typer av (komplexa) objekt.
Gå ur
När du inte längre behöver ta emot meddelanden kan du helt enkelt avsluta prenumerationen. Du kan göra det så här:
MessagingCenter.Unsubscribe<MainPage> (this, "Hi");
När du tillhandahåller argument måste du avsluta prenumerationen på hela signaturen, så här:
MessagingCenter.Unsubscribe<MainPage, string> (this, "Hi");