Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Der ObservableRecipient Typ ist eine Basisklasse für feststellbare Objekte, die auch als Empfänger für Nachrichten fungieren. Diese Klasse ist eine Erweiterung von ObservableObject und bietet außerdem integrierte Unterstützung für die Verwendung des Typs IMessenger.
Plattform-APIs:
ObservableRecipient, ,ObservableObject,IMessenger,WeakReferenceMessengerIRecipient<TMessage>PropertyChangedMessage<T>
So funktioniert es
Der ObservableRecipient Typ soll als Basis für Viewmodels verwendet werden, die auch die IMessenger Features verwenden, da er integrierte Unterstützung dafür bietet. Dies gilt insbesondere für:
- Sie verfügt sowohl über einen parameterlosen Konstruktor als auch über einen Konstruktor, der eine
IMessengerInstanz verwendet, die mit Abhängigkeitsinjektion verwendet werden soll. Außerdem wird eineMessengerEigenschaft verfügbar gemacht, die zum Senden und Empfangen von Nachrichten im Ansichtsmodell verwendet werden kann. Wenn der parameterlose Konstruktor verwendet wird, wird dieWeakReferenceMessenger.DefaultInstanz derMessengerEigenschaft zugewiesen. - Sie macht eine
IsActiveEigenschaft verfügbar, um das Ansichtsmodell zu aktivieren/zu deaktivieren. In diesem Kontext bedeutet die Aktivierung, dass ein bestimmtes Ansichtsmodell als verwendet markiert wird, z. B. Sie beginnt mit der Überwachung registrierter Nachrichten, führt andere Setupvorgänge usw. durch. Es gibt zwei verwandte MethodenOnActivatedundOnDeactivated, die aufgerufen werden, wenn der Eigenschaftswert geändert wird. Standardmäßig meldetOnDeactivateddie aktuelle Instanz automatisch von allen registrierten Nachrichten ab. Um optimale Ergebnisse zu erzielen und Speicherlecks zu vermeiden, wird empfohlen,OnActivatedzu verwenden, um sich für Nachrichten zu registrieren, undOnDeactivatedzu verwenden, um Aufräumarbeiten durchzuführen. Mit diesem Muster kann ein Ansichtsmodell mehrmals aktiviert/deaktiviert werden, ohne dass das Risiko von Speicherverlusten bei jeder Deaktivierung besteht.OnActivatedStandardmäßig werden alle über dieIRecipient<TMessage>Schnittstelle definierten Nachrichtenhandler automatisch registriert. - Sie stellt eine
Broadcast<T>(T, T, string)-Methode bereit, die einePropertyChangedMessage<T>-Nachricht über die in derMessenger-Eigenschaft verfügbareIMessenger-Instanz sendet. Dies kann verwendet werden, um Änderungen an den Eigenschaften eines Ansichtsmodells einfach zu übertragen, ohne eineMessengerinstanz für die Verwendung manuell abrufen zu müssen. Diese Methode wird von den Überladungen verschiedenerSetProperty-Methoden verwendet, die eine zusätzliche Eigenschaftbool broadcastaufweisen, um anzugeben, ob zusätzlich eine Nachricht gesendet werden soll.
Hier ist ein Beispiel für ein ViewModel, das LoggedInUserRequestMessage Nachrichten empfängt, wenn es aktiv ist:
public class MyViewModel : ObservableRecipient, IRecipient<LoggedInUserRequestMessage>
{
public void Receive(LoggedInUserRequestMessage message)
{
// Handle the message here
}
}
Im obigen OnActivated Beispiel wird die Instanz automatisch als Empfänger für LoggedInUserRequestMessage Nachrichten registriert, wobei diese Methode als aufrufende Aktion verwendet wird. Die Verwendung der IRecipient<TMessage> Schnittstelle ist nicht obligatorisch, und die Registrierung kann auch manuell durchgeführt werden (auch mit nur einem Inline-Lambda-Ausdruck):
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
}
}
Beispiele
- Sehen Sie sich die Beispiel-App (für mehrere UI-Frameworks) an, um das MVVM-Toolkit in Aktion zu sehen.
- Weitere Beispiele finden Sie auch in den Komponententests.