Xamarin.Forms
MessagingCenter
Ricerca…
introduzione
Xamarin.Forms ha un meccanismo di messaggistica integrato per promuovere il codice disaccoppiato. In questo modo, non è necessario conoscere i modelli e gli altri componenti. Possono comunicare con un semplice contratto di messaggistica.
Ci sono fondamentalmente due ingredienti principali per l'utilizzo di MessagingCenter
.
Iscriviti ; ascoltare i messaggi con una certa firma (il contratto) ed eseguire il codice quando viene ricevuto un messaggio. Un messaggio può avere più abbonati.
Invia ; inviare un messaggio per gli abbonati su cui agire.
Semplice esempio
Qui vedremo un semplice esempio di utilizzo di MessagingCenter in Xamarin.Forms.
Innanzitutto, diamo un'occhiata all'iscrizione a un messaggio. Nel modello FooMessaging
sottoscriviamo un messaggio proveniente da MainPage
. Il messaggio dovrebbe essere "Ciao" e quando lo riceveremo, registriamo un gestore che imposta la proprietà Greeting
. Infine, this
significa che l'istanza attuale di FooMessaging
sta registrando per questo messaggio.
public class FooMessaging
{
public string Greeting { get; set; }
public FooMessaging()
{
MessagingCenter.Subscribe<MainPage> (this, "Hi", (sender) => {
this.Greeting = "Hi there!";
});
}
}
Per inviare un messaggio che attiva questa funzionalità, dobbiamo avere una pagina chiamata MainPage
e implementare il codice come sotto.
public class MainPage : Page
{
private void OnButtonClick(object sender, EventArgs args)
{
MessagingCenter.Send<MainPage> (this, "Hi");
}
}
Nella nostra MainPage
abbiamo un pulsante con un gestore che invia un messaggio. this
dovrebbe essere un'istanza di MainPage
.
Passando argomenti
È anche possibile passare argomenti con un messaggio con cui lavorare.
Useremo le classi del nostro esempio precedente e le estenderemo. Nella parte ricevente, subito dietro la chiamata al metodo Subscribe
, aggiungi il tipo di argomento che ti aspetti. Assicurati inoltre di dichiarare gli argomenti nella firma del gestore.
public class FooMessaging
{
public string Greeting { get; set; }
public FooMessaging()
{
MessagingCenter.Subscribe<MainPage, string> (this, "Hi", (sender, arg) => {
this.Greeting = arg;
});
}
}
Quando invii un messaggio, assicurati di includere il valore dell'argomento. Inoltre, qui aggiungi il tipo subito dopo il metodo Send
e aggiungi il valore dell'argomento.
public class MainPage : Page
{
private void OnButtonClick(object sender, EventArgs args)
{
MessagingCenter.Send<MainPage, string> (this, "Hi", "Hi there!");
}
}
In questo esempio viene utilizzata una stringa semplice, ma è anche possibile utilizzare qualsiasi altro tipo di oggetti (complessi).
Cancellazione, cancellami
Quando non hai più bisogno di ricevere messaggi, puoi semplicemente annullare l'iscrizione. Puoi farlo in questo modo:
MessagingCenter.Unsubscribe<MainPage> (this, "Hi");
Quando stai fornendo argomenti, devi annullare l'iscrizione alla firma completa, come questa:
MessagingCenter.Unsubscribe<MainPage, string> (this, "Hi");