Condividi tramite


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 una Messenger proprietà che può essere usata per inviare e ricevere messaggi nel modello di visualizzazione. Se viene usato il costruttore senza parametri, l'istanza WeakReferenceMessenger.Default verrà assegnata alla Messenger 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 e OnDeactivated, 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 usare OnActivated per la registrazione ai messaggi e per eseguire OnDeactivated 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'interfaccia IRecipient<TMessage> .
  • Espone un Broadcast<T>(T, T, string) metodo che invia un PropertyChangedMessage<T> messaggio tramite l'istanza IMessenger disponibile dalla Messenger proprietà . Può essere usato per trasmettere facilmente le modifiche nelle proprietà di un modello di visualizzazione senza dover recuperare manualmente un'istanza Messenger da usare. Questo metodo viene utilizzato dall'overload dei vari SetProperty metodi, che hanno una proprietà aggiuntiva bool 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