Udostępnij za pośrednictwem


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. Uwidacznia Messenger 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 do Messenger 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 i OnActivatedOnDeactivated, które są wywoływane, gdy właściwość zmienia wartość. Domyślnie OnDeactivated automatycznie wyrejestrowuje bieżące wystąpienie ze wszystkich zarejestrowanych komunikatów. Aby uzyskać najlepsze wyniki i uniknąć przecieków pamięci, zalecane jest użycie OnActivated funkcji rejestrowania w komunikatach i używania OnDeactivated 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ślnie OnActivated program automatycznie zarejestruje wszystkie programy obsługi komunikatów zdefiniowane za pośrednictwem interfejsu IRecipient<TMessage> .
  • Uwidacznia metodę Broadcast<T>(T, T, string) , która wysyła PropertyChangedMessage<T> komunikat za pośrednictwem IMessenger wystąpienia dostępnego Messenger 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 pobierania Messenger wystąpienia do użycia. Ta metoda jest używana przez przeciążenie różnych SetProperty 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.