ObservableRecipient

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 IMessenger a je určen pro použití s vkládáním závislostí. Také zveřejňuje Messenger vlastnost, 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.Default instance bude přiřazena Messenger k vlastnosti.
  • Zpřístupňuje vlastnost IsActive pro 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 a OnActivatedOnDeactivated, které jsou vyvolány při změně hodnoty vlastnosti. Ve výchozím nastavení OnDeactivated automaticky 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žít OnActivated k registraci odběru zpráv a OnDeactivated k 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í OnActivated automaticky zaregistruje všechny obslužné rutiny zpráv definované prostřednictvím IRecipient<TMessage> rozhraní.
  • Zveřejňuje metodu Broadcast<T>(T, T, string) , která odesílá PropertyChangedMessage<T> zprávu prostřednictvím IMessenger instance dostupné z Messenger vlastnosti. To lze použít ke snadnému oznamování změn vlastností viewmodelu, aniž by bylo nutné ručně získávat instanci Messenger pro použití. Tato metoda je používána přetížením různých SetProperty metod, které mají další bool broadcast vlastnost 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.