ObserwowalnyRecipient
Typ ObservableRecipient
jest klasą bazową do obserwowanych obiektów, które również działają jako adresaci komunikatów. Ta klasa jest rozszerzeniem ObservableObject
, którego również zapewnia wbudowaną obsługę użycia IMessenger
typu.
Interfejsy API platformy:
ObservableRecipient
,ObservableObject
,IMessenger
,WeakReferenceMessenger
, ,IRecipient<TMessage>
PropertyChangedMessage<T>
Jak to działa
Typ ObservableRecipient
ma być używany jako podstawa dla modelów widoków, które również korzystają z IMessenger
funkcji, ponieważ zapewnia wbudowaną obsługę. W szczególności:
- Ma on zarówno konstruktor bez parametrów, jak i ten, który przyjmuje wystąpienie, do użycia z wstrzyknięciem
IMessenger
zależności. UwidaczniaMessenger
również właściwość, która może służyć do wysyłania i odbierania komunikatów w modelu viewmodel. Jeśli używany jest konstruktor bez parametrów,WeakReferenceMessenger.Default
wystąpienie zostanie przypisane doMessenger
właściwości . - Uwidacznia
IsActive
właściwość w celu aktywowania/dezaktywowania modelu viewmodel. W tym kontekście "aktywowanie" oznacza, że dany model widoku jest oznaczony jako używany, na przykład. rozpocznie nasłuchiwanie zarejestrowanych komunikatów, wykonywanie innych operacji konfiguracji itp. Istnieją dwie powiązane metody iOnActivated
OnDeactivated
, które są wywoływane, gdy właściwość zmienia wartość. DomyślnieOnDeactivated
automatycznie wyrejestrowuje bieżące wystąpienie ze wszystkich zarejestrowanych komunikatów. Aby uzyskać najlepsze wyniki i uniknąć przecieków pamięci, zalecane jest użycieOnActivated
funkcji rejestrowania w komunikatach i używaniaOnDeactivated
ich do wykonywania operacji oczyszczania. Ten wzorzec umożliwia wielokrotne włączanie/wyłączanie modelu widoków, a jednocześnie bezpieczne zbieranie bez ryzyka przecieków pamięci za każdym razem, gdy jest dezaktywowany. DomyślnieOnActivated
program automatycznie zarejestruje wszystkie programy obsługi komunikatów zdefiniowane za pośrednictwem interfejsuIRecipient<TMessage>
. - Uwidacznia metodę
Broadcast<T>(T, T, string)
, która wysyłaPropertyChangedMessage<T>
komunikat za pośrednictwemIMessenger
wystąpienia dostępnegoMessenger
z właściwości . Może to służyć do łatwego rozgłaszania zmian we właściwościach modelu viewmodel bez konieczności ręcznego pobieraniaMessenger
wystąpienia do użycia. Ta metoda jest używana przez przeciążenie różnychSetProperty
metod, które mają dodatkowąbool broadcast
właściwość, aby wskazać, czy również wysłać komunikat.
Oto przykład modelu widoków, który odbiera LoggedInUserRequestMessage
komunikaty, gdy są aktywne:
public class MyViewModel : ObservableRecipient, IRecipient<LoggedInUserRequestMessage>
{
public void Receive(LoggedInUserRequestMessage message)
{
// Handle the message here
}
}
W powyższym OnActivated
przykładzie automatycznie rejestruje wystąpienie jako adresata LoggedInUserRequestMessage
komunikatów przy użyciu tej metody jako akcji do wywołania. Korzystanie z interfejsu IRecipient<TMessage>
nie jest obowiązkowe, a rejestracja może być również wykonywana ręcznie (nawet przy użyciu wbudowanego wyrażenia 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
}
}
Przykłady
- Zapoznaj się z przykładową aplikacją (dla wielu struktur interfejsu użytkownika), aby zobaczyć, jak działa zestaw narzędzi MVVM Toolkit.
- Więcej przykładów można również znaleźć w testach jednostkowych.