ObservableRecipient
Il ObservableRecipient
tipo è una classe base per oggetti osservabili che funge anche da destinatari per i messaggi. Questa classe è un'estensione di ObservableObject
che fornisce anche il supporto predefinito per l'uso del IMessenger
tipo.
API della piattaforma:
ObservableRecipient
,ObservableObject
,IMessenger
,WeakReferenceMessenger
, , ,IRecipient<TMessage>
PropertyChangedMessage<T>
Funzionamento
Il ObservableRecipient
tipo è progettato per essere usato come base per i modelli di visualizzazione che usano anche le IMessenger
funzionalità, in quanto fornisce il supporto predefinito per esso. In particolare:
- Ha sia un costruttore senza parametri che uno che accetta un'istanza
IMessenger
, da usare con l'inserimento delle dipendenze. Espone inoltre unaMessenger
proprietà che può essere usata per inviare e ricevere messaggi nel modello di visualizzazione. Se viene usato il costruttore senza parametri, l'istanzaWeakReferenceMessenger.Default
verrà assegnata allaMessenger
proprietà . - Espone una
IsActive
proprietà per attivare o disattivare il modello di visualizzazione. In questo contesto, per "attivare" significa che un determinato modello di visualizzazione è contrassegnato come in uso, in modo che ad esempio. inizierà ad ascoltare i messaggi registrati, eseguire altre operazioni di installazione e così via. Esistono due metodi correlati,OnActivated
eOnDeactivated
, che vengono richiamati quando la proprietà cambia valore. Per impostazione predefinita,OnDeactivated
annulla automaticamente la registrazione dell'istanza corrente da tutti i messaggi registrati. Per ottenere risultati ottimali e per evitare perdite di memoria, è consigliabile usareOnActivated
per la registrazione ai messaggi e per eseguireOnDeactivated
operazioni di pulizia. Questo modello consente a un modello di visualizzazione di essere abilitato/disabilitato più volte, pur essendo sicuro da raccogliere senza il rischio di perdite di memoria ogni volta che viene disattivato. Per impostazione predefinita,OnActivated
registrerà automaticamente tutti i gestori di messaggi definiti tramite l'interfacciaIRecipient<TMessage>
. - Espone un
Broadcast<T>(T, T, string)
metodo che invia unPropertyChangedMessage<T>
messaggio tramite l'istanzaIMessenger
disponibile dallaMessenger
proprietà . Può essere usato per trasmettere facilmente le modifiche nelle proprietà di un modello di visualizzazione senza dover recuperare manualmente un'istanzaMessenger
da usare. Questo metodo viene utilizzato dall'overload dei variSetProperty
metodi, che hanno una proprietà aggiuntivabool broadcast
per indicare se inviare o meno anche un messaggio.
Di seguito è riportato un esempio di modello di visualizzazione che riceve messaggi LoggedInUserRequestMessage
quando è attivo:
public class MyViewModel : ObservableRecipient, IRecipient<LoggedInUserRequestMessage>
{
public void Receive(LoggedInUserRequestMessage message)
{
// Handle the message here
}
}
Nell'esempio precedente, OnActivated
registra automaticamente l'istanza come destinatario per LoggedInUserRequestMessage
i messaggi, usando tale metodo come azione da richiamare. L'uso dell'interfaccia IRecipient<TMessage>
non è obbligatorio e la registrazione può essere eseguita manualmente (anche usando solo un'espressione lambda inline):
public class MyViewModel : ObservableRecipient
{
protected override void OnActivated()
{
// Using a method group...
Messenger.Register<MyViewModel, LoggedInUserRequestMessage>(this, (r, m) => r.Receive(m));
// ...or a lambda expression
Messenger.Register<MyViewModel, LoggedInUserRequestMessage>(this, (r, m) =>
{
// Handle the message here
});
}
private void Receive(LoggedInUserRequestMessage message)
{
// Handle the message here
}
}
Esempi
- Vedere l'app di esempio (per più framework dell'interfaccia utente) per vedere MVVM Toolkit in azione.
- È anche possibile trovare altri esempi negli unit test.