Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O tipo ObservableRecipient é uma classe base para objetos observáveis que também funcionam como destinatários de mensagens. Essa classe é uma extensão de ObservableObject, que também fornece suporte interno para o uso do tipo IMessenger.
APIs de plataforma:
ObservableRecipient,ObservableObject,IMessenger,WeakReferenceMessenger,IRecipient<TMessage>,PropertyChangedMessage<T>
Como ele funciona
O tipo ObservableRecipient deve ser usado como base para viewmodels que também usam os recursos de IMessenger, pois ele fornece suporte interno a ele. Especialmente:
- Ele tem um construtor sem parâmetros e outro que usa uma instância de
IMessenger, a ser usada com a injeção de dependência. Também expõe uma propriedadeMessengerque pode ser usada para enviar e receber mensagens no viewmodel. Se o construtor sem parâmetros for usado, a instância deWeakReferenceMessenger.Defaultserá atribuída à propriedadeMessenger. - Ele expõe uma propriedade
IsActivepara ativar/desativar o viewmodel. Nesse contexto, “ativar” significa que um determinado viewmodel está marcado como estando em uso, por exemplo, ele começará a escutar as mensagens registradas, executar outras operações de instalação etc. Há dois métodos relacionados,OnActivatedeOnDeactivated, que são invocados quando a propriedade altera o valor. Por padrão,OnDeactivatedcancela automaticamente o registro da instância atual de todas as mensagens registradas. Para obter melhores resultados e evitar perdas de memória, recomendamos usarOnActivatedpara o registro em mensagens eOnDeactivatedpara fazer operações de limpeza. Esse padrão permite que um viewmodel seja habilitado/desabilitado várias vezes, sendo seguro para coleta, sem o risco de perda de memória sempre que ele é desativado. Por padrão,OnActivatedregistrará automaticamente todos os manipuladores de mensagens definidos por meio da interfaceIRecipient<TMessage>. - Ele expõe um método
Broadcast<T>(T, T, string)que envia uma mensagemPropertyChangedMessage<T>por meio da instância deIMessengerdisponível por meio da propriedadeMessenger. Isso pode ser usado para transmitir com facilidade as alterações nas propriedades de um viewmodel sem a necessidade de recuperar manualmente uma instância deMessengerpara usá-la. Esse método é usado pela sobrecarga dos vários métodosSetProperty, que têm uma propriedadebool broadcastadicional para indicar se uma mensagem também deve ser enviada.
Veja um exemplo de um viewmodel que recebe mensagens LoggedInUserRequestMessage quando ativo:
public class MyViewModel : ObservableRecipient, IRecipient<LoggedInUserRequestMessage>
{
public void Receive(LoggedInUserRequestMessage message)
{
// Handle the message here
}
}
No exemplo acima, OnActivated registra automaticamente a instância como um destinatário de mensagens LoggedInUserRequestMessage, usando esse método como a ação a ser invocada. O uso da interface IRecipient<TMessage> não é obrigatório e o registro também pode ser feito manualmente (até mesmo usando apenas uma expressão lambda embutida):
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
}
}
Exemplos
- Confira o aplicativo de exemplo (para várias estruturas de interface do usuário) para ver o Kit de Ferramentas do MVVM em ação.
- Encontre também mais exemplos nos testes de unidade.