Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Typ ObservableRecipient je základní třída pro pozorovatelné objekty, které fungují také jako příjemci zpráv. Tato třída je rozšířením ObservableObject, které také poskytuje integrovanou podporu pro použití typu IMessenger.
Rozhraní API platformy:
ObservableRecipient,ObservableObject,IMessengerWeakReferenceMessenger, ,IRecipient<TMessage>PropertyChangedMessage<T>
Jak to funguje
Typ ObservableRecipient je určen jako základ pro view modely, které také využívají funkce IMessenger, protože pro ně poskytuje integrovanou podporu. Zejména jde o toto:
- Má konstruktor bez parametrů i konstruktor, který přijímá instanci
IMessengera je určen pro použití s vkládáním závislostí. Také zveřejňujeMessengervlastnost, kterou lze použít k odesílání a přijímání zpráv v modelu viewmodel. Pokud se použije konstruktor bez parametrů,WeakReferenceMessenger.Defaultinstance bude přiřazenaMessengerk vlastnosti. - Zpřístupňuje vlastnost
IsActivepro aktivaci nebo deaktivaci modelu zobrazení. V tomto kontextu "aktivace" znamená, že daný model zobrazení je označen jako používán, například. začne naslouchat registrovaným zprávům, provádět další operace nastavení atd. Existují dvě související metody aOnActivatedOnDeactivated, které jsou vyvolány při změně hodnoty vlastnosti. Ve výchozím nastaveníOnDeactivatedautomaticky zruší registraci aktuální instance ze všech registrovaných zpráv. Pro dosažení nejlepších výsledků a zabránění únikům paměti se doporučuje použítOnActivatedk registraci odběru zpráv aOnDeactivatedk provádění operací čištění. Tento vzor umožňuje model zobrazení opakovaně aktivovat a deaktivovat, přičemž jej lze při každé jeho deaktivaci bezpečně uvolnit bez rizika úniků paměti. Ve výchozím nastaveníOnActivatedautomaticky zaregistruje všechny obslužné rutiny zpráv definované prostřednictvímIRecipient<TMessage>rozhraní. - Zveřejňuje metodu
Broadcast<T>(T, T, string), která odesíláPropertyChangedMessage<T>zprávu prostřednictvímIMessengerinstance dostupné zMessengervlastnosti. To lze použít ke snadnému oznamování změn vlastností viewmodelu, aniž by bylo nutné ručně získávat instanciMessengerpro použití. Tato metoda je používána přetížením různýchSetPropertymetod, které mají dalšíbool broadcastvlastnost určit, zda nebo ne odeslat zprávu.
Tady je příklad modelu zobrazení, který přijímá LoggedInUserRequestMessage zprávy, když je aktivní:
public class MyViewModel : ObservableRecipient, IRecipient<LoggedInUserRequestMessage>
{
public void Receive(LoggedInUserRequestMessage message)
{
// Handle the message here
}
}
V předchozím OnActivated příkladu automaticky zaregistruje instanci jako příjemce zpráv LoggedInUserRequestMessage pomocí této metody jako akce, která se má vyvolat. Použití rozhraní IRecipient<TMessage> není povinné a registraci lze provést i ručně (dokonce i pouze pomocí vloženého výrazu lambda):
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
}
}
Příklady
- Podívejte se na ukázkovou aplikaci (pro více architektur uživatelského rozhraní) a podívejte se na sadu nástrojů MVVM v akci.
- Další příklady najdete také v testech jednotek.