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, ObservableObject sınıfının bir uzantısıdır ve ayrıca IMessenger türünü kullanmak için yerleşik destek sunar.

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

Nasıl çalışır?

ObservableRecipient türü, IMessenger özelliklerini de kullanan görünüm modelleri için taban sınıfı olarak kullanılmak üzere tasarlanmıştır, çünkü bunlar için yerleşik destek sunar. Özellikle:

  • Hem parametresiz bir oluşturucusu hem de bağımlılık enjeksiyonunda kullanılmak üzere bir IMessenger örneği alan bir oluşturucusu vardır. 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 modelinin kullanımda olarak işaretlenmesi anlamına gelir; böylece örneğin kayıtlı iletileri dinlemeye başlar, diğer başlatma işlemlerini gerçekleştirir vb. Özelliğin değeri değiştiğinde çağrılan, OnActivated ve OnDeactivated olmak üzere ilişkili iki yöntem 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.
  • Messenger özelliğinden erişilebilen IMessenger örneği aracılığıyla bir PropertyChangedMessage<T> mesajı gönderen bir Broadcast<T>(T, T, string) yöntemi sunar. Bu, kullanmak için bir Messenger örneğini manuel olarak almaya gerek kalmadan görünüm modelinin özelliklerindeki değişiklikleri kolayca yayınlamak için kullanılabilir. Bu yöntem, ayrıca bir iletinin gönderilip gönderilmeyeceğini belirtmek için ek bir bool broadcast özelliğine sahip çeşitli SetProperty yöntemlerinin aşırı yüklenmiş sürümleri tarafından kullanılır.

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

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

Yukarıdaki örnekte, OnActivated, bu yöntemi çağrılacak eylem olarak kullanarak örneği LoggedInUserRequestMessage iletileri için 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
    }
}

Examples