Sdílet prostřednictvím


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í, jehož ObservableObject součástí je také integrovaná podpora 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 modely viewmodelů, které také používají IMessenger funkce, protože poskytuje integrovanou podporu. Zejména jde o toto:

  • Má jak konstruktor bez parametrů, tak konstruktor, který přebírá IMessenger instanci, která se má použít s injektáží 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.
  • Zveřejňuje IsActive vlastnost pro aktivaci nebo deaktivaci modelu viewmodel. 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. Nejlepších výsledků a zabránění nevracení paměti se doporučuje použít OnActivated k registraci do zpráv a k OnDeactivated provádění operací čištění. Tento model umožňuje povolit nebo zakázat model zobrazení několikrát a současně je bezpečné shromažďovat bez rizika nevracení paměti při každém deaktivaci. 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 k snadnému vysílání změn ve vlastnostech modelu viewmodel, aniž byste museli ručně načíst Messenger instanci, která se má použít. 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. IRecipient<TMessage> Použití rozhraní není povinné a registraci je možné provést také ručně (i pomocí pouze 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.