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
,IMessenger
WeakReferenceMessenger
, ,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ňujeMessenger
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řazenaMessenger
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 aOnActivated
OnDeactivated
, 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žítOnActivated
k registraci do zpráv a kOnDeactivated
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ímIRecipient<TMessage>
rozhraní. - Zveřejňuje metodu
Broadcast<T>(T, T, string)
, která odesíláPropertyChangedMessage<T>
zprávu prostřednictvímIMessenger
instance dostupné zMessenger
vlastnosti. To lze použít k snadnému vysílání změn ve vlastnostech modelu viewmodel, aniž byste museli ručně načístMessenger
instanci, která se má použít. Tato metoda je používána přetížením různýchSetProperty
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.