ObservableRecipient

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 properti Messenger yang dapat digunakan untuk mengirim dan menerima pesan di viewmodel. Jika konstruktor tanpa parameter digunakan, instans WeakReferenceMessenger.Default akan ditetapkan ke properti Messenger.
  • Ini menyediakan properti IsActive yang 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, OnActivated dan OnDeactivated, yang dipanggil ketika nilai properti berubah. Secara bawaan, OnDeactivated secara otomatis membatalkan registrasi instance saat ini dari semua pesan yang terdaftar. Untuk hasil terbaik dan untuk menghindari kebocoran memori, disarankan untuk digunakan OnActivated untuk mendaftar ke pesan, dan digunakan OnDeactivated 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 melalui IRecipient<TMessage> antarmuka.
  • Ini menyediakan metode Broadcast<T>(T, T, string) yang mengirim pesan PropertyChangedMessage<T> melalui instans IMessenger yang tersedia dari properti Messenger. Ini dapat digunakan untuk memudahkan penerusan perubahan pada properti viewmodel tanpa harus mengambil instance Messenger secara manual agar dapat menggunakannya. Metode ini digunakan oleh kelebihan beban berbagai SetProperty metode, yang memiliki properti tambahan bool 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. 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.