Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Jenisnya ObservableRecipient adalah kelas dasar untuk objek yang dapat diamati yang juga bertindak sebagai penerima pesan. Kelas ini merupakan ekstensi dari ObservableObject yang juga menyediakan dukungan bawaan untuk menggunakan tipe IMessenger.
API Platform:
ObservableRecipient,ObservableObject,IMessenger,WeakReferenceMessenger,IRecipient<TMessage>,PropertyChangedMessage<T>
Cara kerjanya
Tipe ObservableRecipient ini dimaksudkan untuk digunakan sebagai dasar bagi viewmodel yang juga menggunakan fitur IMessenger, karena sudah menyediakan dukungan bawaan untuk fitur tersebut. Secara khusus:
- Memiliki konstruktor tanpa parameter dan konstruktor yang menerima instans
IMessenger, untuk digunakan dalam injeksi dependensi. Ini juga menyediakan propertiMessengeryang dapat digunakan untuk mengirim dan menerima pesan di viewmodel. Jika konstruktor tanpa parameter digunakan, instansWeakReferenceMessenger.Defaultakan ditetapkan ke propertiMessenger. - Ini menyediakan properti
IsActiveyang digunakan untuk mengaktifkan/menonaktifkan model tampilan. Dalam konteks ini, istilah "mengaktifkan" berarti bahwa viewmodel tertentu ditandai sebagai sedang digunakan, sehingga, misalnya, viewmodel tersebut akan mulai mendengarkan pesan yang telah didaftarkan, melakukan operasi penyiapan lain, dan sebagainya. Ada dua metode terkait,OnActivateddanOnDeactivated, yang dipanggil ketika nilai properti berubah. Secara bawaan,OnDeactivatedsecara otomatis membatalkan registrasi instance saat ini dari semua pesan yang terdaftar. Untuk hasil terbaik dan untuk menghindari kebocoran memori, disarankan untuk digunakanOnActivateduntuk mendaftar ke pesan, dan digunakanOnDeactivateduntuk melakukan operasi pembersihan. Pola ini memungkinkan viewmodel diaktifkan/dinonaktifkan beberapa kali, sekaligus aman untuk dikumpulkan tanpa risiko kebocoran memori setiap kali dinonaktifkan. Secara default,OnActivatedakan secara otomatis mendaftarkan semua penangan pesan yang ditentukan melaluiIRecipient<TMessage>antarmuka. - Ini menyediakan metode
Broadcast<T>(T, T, string)yang mengirim pesanPropertyChangedMessage<T>melalui instansIMessengeryang tersedia dari propertiMessenger. Ini dapat digunakan untuk memudahkan penerusan perubahan pada properti viewmodel tanpa harus mengambil instanceMessengersecara manual agar dapat menggunakannya. Metode ini digunakan oleh kelebihan beban berbagaiSetPropertymetode, yang memiliki properti tambahanbool broadcastuntuk 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. Menggunakan antarmuka IRecipient<TMessage> tidak wajib, dan pendaftaran juga dapat dilakukan secara manual (bahkan hanya dengan menggunakan ekspresi lambda inline):
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
- 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