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
Lepaskan: 2025-01-07 16:37:46
asal
696 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan