Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mencipta ObservableCollection yang Memantau Perubahan dalam Sifat Elemennya?

Bagaimanakah Saya Boleh Mencipta ObservableCollection yang Memantau Perubahan dalam Sifat Elemennya?

Linda Hamilton
Linda Hamiltonasal
2025-01-07 16:37:46667semak imbas

How Can I Create an ObservableCollection That Monitors Changes in its Element Properties?

ObservableCollection untuk memantau perubahan elemen

Pernyataan Masalah

Bayangkan ObservableCollection di mana elemen melaksanakan INotifyPropertyChanged dan koleksi itu sendiri memantau elemen tersebut untuk sebarang perubahan. Walaupun ObservableCollection wujud, tidak jelas sama ada terdapat koleksi sedia ada yang memenuhi keperluan tepat ini.

Penyelesaian

Kelas ObservableCollectionEx

Penyelesaian yang dicadangkan memperkenalkan ObservableCollectionEx, yang merupakan lanjutan daripada ObservableCollection. Dalam pelaksanaan ini:

  • OnCollectionChanged: Mengemas kini langganan acara untuk item yang telah ditambahkan atau dialih keluar.
  • ClearItems: Nyahlanggan daripada perubahan sifat elemen sebelum mengosongkan.
  • Langgan: Langgan perubahan harta benda bagi item yang baru ditambah.
  • Nyahlanggan: Nyahlanggan daripada perubahan sifat item yang dipadamkan.
  • ContainedElementChanged: Menyebarkan perubahan sifat elemen pada koleksi.

Penggunaan

ObservableCollectionEx digunakan seperti berikut:

<code class="language-csharp">ObservableCollectionEx<Element> collection = new ObservableCollectionEx<Element>();
((INotifyPropertyChanged)collection).PropertyChanged += (x, y) => ReactToChange();</code>

Nota

Walaupun pelaksanaan ini mengaktifkan acara PropertyChanged koleksi apabila sifat unsur berubah, ini boleh mengelirukan. Oleh itu, acara tambahan boleh diperkenalkan khusus untuk perubahan tersebut.

Tambahan pula, pelaksanaan ObservableCollection dalam BCL hanya mendedahkan antara muka INotifyPropertyChanged secara eksplisit. Melanggan acara memerlukan penghantaran seperti berikut:

<code class="language-csharp">((INotifyPropertyChanged)collection).PropertyChanged += (x, y) => ReactToChange();</code>

Perhatikan bahawa berhenti melanggan PropertyChanged memerlukan menetapkan pengendali acara kepada null:

<code class="language-csharp">collection.PropertyChanged -= (s, e) => { Trace.WriteLine("Changed " + e.PropertyName); };</code>

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencipta ObservableCollection yang Memantau Perubahan dalam Sifat Elemennya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn