ObservableRecipient
Jenisnya ObservableRecipient
adalah kelas dasar untuk objek yang dapat diamati yang juga bertindak sebagai penerima pesan. Kelas ini adalah ekstensi yang juga menyediakan dukungan bawaan ObservableObject
untuk menggunakan jenis .IMessenger
API Platform:
ObservableRecipient
,ObservableObject
,IMessenger
,WeakReferenceMessenger
,IRecipient<TMessage>
,PropertyChangedMessage<T>
Cara kerjanya
ObservableRecipient
Jenis ini dimaksudkan untuk digunakan sebagai basis untuk viewmodel yang juga menggunakan IMessenger
fitur, karena menyediakan dukungan bawaan untuk itu. Secara khusus:
- Ini memiliki konstruktor tanpa parameter dan konstruktor yang mengambil
IMessenger
instans, untuk digunakan dengan injeksi dependensi. Ini juga mengeksposMessenger
properti yang dapat digunakan untuk mengirim dan menerima pesan di viewmodel. Jika konstruktor tanpa parameter digunakan,WeakReferenceMessenger.Default
instans akan ditetapkan keMessenger
properti . - Ini mengekspos
IsActive
properti untuk mengaktifkan/menonaktifkan viewmodel. Dalam konteks ini, untuk "mengaktifkan" berarti bahwa viewmodel tertentu ditandai sebagai sedang digunakan, misalnya. ini akan mulai mendengarkan pesan terdaftar, melakukan operasi penyiapan lainnya, dll. Ada dua metode terkait,OnActivated
danOnDeactivated
, yang dipanggil ketika properti berubah nilai. Secara default,OnDeactivated
secara otomatis membatalkan pendaftaran instans saat ini dari semua pesan terdaftar. Untuk hasil terbaik dan untuk menghindari kebocoran memori, disarankan untuk digunakanOnActivated
untuk mendaftar ke pesan, dan digunakanOnDeactivated
untuk melakukan operasi pembersihan. Pola ini memungkinkan viewmodel diaktifkan/dinonaktifkan beberapa kali, sekaligus aman untuk dikumpulkan tanpa risiko kebocoran memori setiap kali dinonaktifkan. Secara default,OnActivated
akan secara otomatis mendaftarkan semua penangan pesan yang ditentukan melaluiIRecipient<TMessage>
antarmuka. - Ini mengekspos
Broadcast<T>(T, T, string)
metode yang mengirim pesan melalui instansPropertyChangedMessage<T>
yangIMessenger
tersedia dariMessenger
properti. Ini dapat digunakan untuk dengan mudah menyiarkan perubahan dalam properti viewmodel tanpa harus mengambilMessenger
instans secara manual untuk digunakan. Metode ini digunakan oleh kelebihan beban berbagaiSetProperty
metode, yang memiliki properti tambahanbool broadcast
untuk menunjukkan apakah akan mengirim pesan atau tidak.
Berikut adalah contoh viewmodel yang menerima LoggedInUserRequestMessage
pesan saat aktif:
public class MyViewModel : ObservableRecipient, IRecipient<LoggedInUserRequestMessage>
{
public void Receive(LoggedInUserRequestMessage message)
{
// Handle the message here
}
}
Dalam contoh di atas, OnActivated
secara otomatis mendaftarkan instans sebagai penerima pesan LoggedInUserRequestMessage
, menggunakan metode tersebut sebagai tindakan yang akan dipanggil. IRecipient<TMessage>
Menggunakan antarmuka tidak wajib, dan pendaftaran juga dapat dilakukan secara manual (bahkan hanya menggunakan ekspresi lambda sebaris):
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
}
}
Contoh
- Lihat contoh aplikasi (untuk beberapa kerangka kerja UI) untuk melihat Toolkit MVVM beraksi.
- Anda juga dapat menemukan lebih banyak contoh dalam pengujian unit.
MVVM Toolkit