Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El ObservableRecipient tipo es una clase base para objetos observables que también actúa como destinatarios para los mensajes. Esta clase es una extensión de ObservableObject la que también proporciona compatibilidad integrada para usar el IMessenger tipo .
API de plataforma:
ObservableRecipient,ObservableObject,IMessenger,WeakReferenceMessenger, ,IRecipient<TMessage>,PropertyChangedMessage<T>
Cómo funciona
El ObservableRecipient tipo está diseñado para usarse como base para los modelos de vista que también usan las IMessenger características, ya que proporciona compatibilidad integrada para él. En particular:
- Tiene tanto un constructor sin parámetros como otro que acepta una instancia de
IMessenger, para su uso con la inyección de dependencias. También expone unaMessengerpropiedad que se puede usar para enviar y recibir mensajes en el modelo de vista. Si se usa el constructor sin parámetros, laWeakReferenceMessenger.Defaultinstancia se asignará a laMessengerpropiedad . - Expone una
IsActivepropiedad para activar o desactivar el modelo de vista. En este contexto, para "activar" significa que un modelo de vista determinado está marcado como en uso, por ejemplo, comenzará a escuchar mensajes registrados, realizar otras operaciones de configuración, etc. Hay dos métodos relacionados,OnActivatedyOnDeactivated, que se invocan cuando cambia el valor de la propiedad. De forma predeterminada,OnDeactivatedanula automáticamente el registro de la instancia actual de todos los mensajes registrados. Para obtener los mejores resultados y evitar pérdidas de memoria, se recomienda usarOnActivatedpara registrarse en los mensajes y usarOnDeactivatedpara realizar operaciones de limpieza. Este patrón permite que un modelo de vista se habilite y deshabilite varias veces, y que pueda ser recolectado de forma segura sin riesgo de fugas de memoria cada vez que se desactive. De forma predeterminada,OnActivatedregistrará automáticamente todos los controladores de mensajes definidos a través de laIRecipient<TMessage>interfaz . - Expone un
Broadcast<T>(T, T, string)método que envía unPropertyChangedMessage<T>mensaje a través de laIMessengerinstancia disponible desde laMessengerpropiedad . Esto se puede usar para difundir fácilmente los cambios en las propiedades de un modelo de vista sin tener que recuperar manualmente unaMessengerinstancia que se va a usar. Este método es utilizado por las distintas sobrecargas de los métodosSetProperty, que tienen una propiedad adicionalbool broadcastpara indicar si se debe enviar también un mensaje o no.
Este es un ejemplo de un modelo de vista que recibe LoggedInUserRequestMessage mensajes cuando está activo:
public class MyViewModel : ObservableRecipient, IRecipient<LoggedInUserRequestMessage>
{
public void Receive(LoggedInUserRequestMessage message)
{
// Handle the message here
}
}
En el ejemplo anterior, OnActivated registra automáticamente la instancia como un destinatario para LoggedInUserRequestMessage los mensajes, utilizando ese método como la acción que se va a invocar. El uso de la IRecipient<TMessage> interfaz no es obligatorio y el registro también se puede realizar manualmente (incluso usando solo una expresión lambda insertada):
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
}
}
Ejemplos
- Consulte la aplicación de ejemplo (para varios marcos de interfaz de usuario) para ver el kit de herramientas de MVVM en acción.
- También puede encontrar más ejemplos en las pruebas unitarias.