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 ObservableRecipient tipo é uma classe base para objetos observáveis que também atuam como destinatários de mensagens. Essa classe é uma extensão da ObservableObject qual também fornece suporte interno para usar o IMessenger tipo.
APIs de plataforma:
ObservableRecipient,ObservableObject, ,IMessenger,WeakReferenceMessenger,IRecipient<TMessage>,PropertyChangedMessage<T>
Como funciona
O tipo ObservableRecipient deve ser usado como base para modelos de exibição que também usam os recursos de IMessenger, pois fornece suporte integrado para eles. Em particular:
- Ele tem um construtor sem parâmetros e um que usa uma
IMessengerinstância para ser usado com injeção de dependência. Ele também expõe umaMessengerpropriedade que pode ser usada para enviar e receber mensagens no viewmodel. Se o construtor sem parâmetros for usado, aWeakReferenceMessenger.Defaultinstância será atribuída àMessengerpropriedade. - Ele disponibiliza a propriedade
IsActivepara ativar ou desativar o modelo de exibição. Nesse contexto, "ativar" significa que um determinado viewmodel é marcado como estando em uso, de modo que, por exemplo, ele passará a escutar mensagens registradas, executar outras operações de configuração etc. Há dois métodos relacionados,OnActivatedeOnDeactivated, que são invocados quando o valor da propriedade muda. Por padrão,OnDeactivatedcancela automaticamente o registro da instância atual de todas as mensagens registradas. Para obter melhores resultados e evitar vazamentos de memória, é recomendável usarOnActivatedo registro em mensagens e usarOnDeactivatedpara fazer operações de limpeza. Esse padrão permite que um ViewModel seja habilitado e desabilitado várias vezes, podendo ser coletado com segurança sem o risco de vazamentos de memória cada vez que ele é desativado. Por padrão,OnActivatedregistrará automaticamente todos os manipuladores de mensagens definidos por meio daIRecipient<TMessage>interface. - Ele expõe um método
Broadcast<T>(T, T, string)que envia uma mensagemPropertyChangedMessage<T>por meio da instânciaIMessengerdisponível na propriedadeMessenger. Isso pode ser usado para propagar facilmente alterações de propriedades de um viewmodel sem precisar recuperar manualmente uma instância deMessengerpara usar. Esse método é usado pela sobrecarga dos váriosSetPropertymétodos, que têm uma propriedade adicionalbool broadcastpara indicar se também deve ou não enviar uma mensagem.
Aqui está um exemplo de um viewmodel que recebe LoggedInUserRequestMessage mensagens 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 LoggedInUserRequestMessage mensagens, usando esse método como a ação a ser invocada. O uso da IRecipient<TMessage> interface não é obrigatório e o registro também pode ser feito manualmente (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 MVVM em ação.
- Você também pode encontrar mais exemplos nos testes de unidade.