Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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
IMessengerzależności. UwidaczniaMessengerró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.Defaultwystąpienie zostanie przypisane doMessengerwłaściwości . - Uwidacznia
IsActivewł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 iOnActivatedOnDeactivated, które są wywoływane, gdy właściwość zmienia wartość. DomyślnieOnDeactivatedautomatycznie wyrejestrowuje bieżące wystąpienie ze wszystkich zarejestrowanych komunikatów. Aby uzyskać najlepsze wyniki i uniknąć przecieków pamięci, zalecane jest użycieOnActivatedfunkcji rejestrowania w komunikatach i używaniaOnDeactivatedich 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ślnieOnActivatedprogram 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średnictwemIMessengerwystąpienia dostępnegoMessengerz 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 pobieraniaMessengerwystąpienia do użycia. Ta metoda jest używana przez przeciążenie różnychSetPropertymetod, które mają dodatkowąbool broadcastwł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.
MVVM Toolkit