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 ObservableObject
IMessenger
.
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 birMessenger
özelliği de kullanıma sunar. Parametresiz oluşturucu kullanılırsa,WeakReferenceMessenger.Default
örnek özelliğineMessenger
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 veOnDeactivated
ile ilgili iki yöntemOnActivated
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, iletilereOnActivated
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ığıylaIRecipient<TMessage>
tanımlanan tüm ileti işleyicilerini otomatik olarak kaydeder. - Özelliğinden
Messenger
sağlanan örnek aracılığıylaIMessenger
ileti gönderen birPropertyChangedMessage<T>
Broadcast<T>(T, T, string)
yöntemi kullanıma sunar. Bu, kullanılacak bir örneği el ile almakMessenger
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 ekbool broadcast
bir özelliğe sahip olan çeşitliSetProperty
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
- MVVM Araç Seti'ni uygulamada görmek için örnek uygulamaya (birden çok UI çerçevesi için) göz atın.
- Birim testlerinde daha fazla örnek de bulabilirsiniz.
MVVM Toolkit