Aracılığıyla paylaş


ObservableRecipient

türü ObservableRecipient , iletilerin alıcısı olarak da davranan gözlemlenebilir nesneler için temel bir sınıftır. Bu sınıf, türünü kullanmak için yerleşik destek sağlayan bir uzantısıdır ObservableObjectIMessenger .

Platform API'leri:ObservableRecipient, ObservableObject, IMessenger, WeakReferenceMessenger, IRecipient<TMessage>, PropertyChangedMessage<T>

Nasıl çalışır?

Türün ObservableRecipient , özellikleri kullanan IMessenger görünüm modelleri için temel olarak kullanılması amaçlanır, bunun için yerleşik destek sağlar. Özellikle:

  • Hem parametresiz oluşturucuya hem de bağımlılık ekleme ile kullanılacak örneği alan bir IMessenger oluşturucuya sahiptir. Ayrıca, görünüm modelinde ileti göndermek ve almak için kullanılabilecek bir Messenger özelliği de kullanıma sunar. Parametresiz oluşturucu kullanılırsa, WeakReferenceMessenger.Default örnek özelliğine Messenger atanır.
  • Görünüm modelini etkinleştirmek/devre dışı bırakmak için bir IsActive özelliği kullanıma sunar. Bu bağlamda, "etkinleştirmek", belirli bir görünüm modelinde kullanımda olarak işaretlendiği anlamına gelir, örneğin. kayıtlı iletileri dinlemeye, diğer kurulum işlemlerini gerçekleştirmeye vb. başlar. özelliği değeri değiştirdiğinde çağrılan ve OnDeactivatedile ilgili iki yöntem OnActivated vardır. Varsayılan olarak, OnDeactivated geçerli örneğin kaydını tüm kayıtlı iletilerden otomatik olarak kaldırır. En iyi sonuçları elde etmek ve bellek sızıntılarını önlemek için, iletilere OnActivated kaydolmak ve temizleme işlemleri yapmak için kullanılması OnDeactivated önerilir. Bu düzen, bir görünüm modelinin birden çok kez etkinleştirilmesine/devre dışı bırakılmasına olanak tanırken, her devre dışı bırakıldığında bellek sızıntısı riski olmadan toplamanın güvenli olmasını sağlar. Varsayılan olarak, OnActivated arabirim aracılığıyla IRecipient<TMessage> tanımlanan tüm ileti işleyicilerini otomatik olarak kaydeder.
  • Özelliğinden Messenger sağlanan örnek aracılığıyla IMessenger ileti gönderen bir PropertyChangedMessage<T>Broadcast<T>(T, T, string) yöntemi kullanıma sunar. Bu, kullanılacak bir örneği el ile almak Messenger zorunda kalmadan görünüm modeli özelliklerindeki değişiklikleri kolayca yayınlamak için kullanılabilir. Bu yöntem, ileti gönderip göndermeyebileceğinizi belirtmek için ek bool broadcast bir özelliğe sahip olan çeşitli SetProperty yöntemlerin aşırı yüklemesi tarafından kullanılır.

Etkin olduğunda ileti alan bir görünüm modeli örneği aşağıda verilmiştir LoggedInUserRequestMessage :

public class MyViewModel : ObservableRecipient, IRecipient<LoggedInUserRequestMessage>
{
    public void Receive(LoggedInUserRequestMessage message)
    {
        // Handle the message here
    }
}

Yukarıdaki örnekte, OnActivated çağrılacak eylem olarak bu yöntemi kullanarak örneği iletiler için LoggedInUserRequestMessage otomatik olarak alıcı olarak kaydeder. Arabirimin IRecipient<TMessage> kullanılması zorunlu değildir ve kayıt el ile de yapılabilir (yalnızca satır içi lambda ifadesi kullanılarak bile):

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
    }
}

Örnekler