ObservableCollection yang memantau perubahan koleksi dan atribut elemen
Soalan:
Adakah terdapat koleksi yang secara serentak boleh memantau perubahan dalam koleksi itu sendiri dan perubahan dalam atribut elemennya?
Penyelesaian:
Jika tiada koleksi siap sedia memenuhi keperluan ini, anda boleh membuat pelaksanaan yang memanjangkan ObservableCollection
untuk memantau elemennya bagi acara PropertyChanged
.
Pelaksanaan:
Berikut ialah contoh pelaksanaan ObservableCollectionEx
yang melaksanakan fungsi ini:
<code class="language-csharp">public class ObservableCollectionEx<T> : ObservableCollection<T> where T : INotifyPropertyChanged { protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs e) { Unsubscribe(e.OldItems); Subscribe(e.NewItems); base.OnCollectionChanged(e); } protected override void ClearItems() { foreach (T element in this) element.PropertyChanged -= ContainedElementChanged; base.ClearItems(); } private void Subscribe(IList iList) { if (iList != null) { foreach (T element in iList) element.PropertyChanged += ContainedElementChanged; } } private void Unsubscribe(IList iList) { if (iList != null) { foreach (T element in iList) element.PropertyChanged -= ContainedElementChanged; } } private void ContainedElementChanged(object sender, PropertyChangedEventArgs e) { OnPropertyChanged(new PropertyChangedEventArgs(e.PropertyName)); //Corrected this line. } }</code>
Penggunaan:
Gunakan ObservableCollection
seperti ObservableCollectionEx
biasa, tetapi tukarkannya kepada INotifyPropertyChanged
untuk melanggan peristiwa perubahan sifat elemennya:
<code class="language-csharp">ObservableCollectionEx<Element> collection = new ObservableCollectionEx<Element>(); ((INotifyPropertyChanged)collection).PropertyChanged += (x, y) => ReactToChange();</code>
Nota: Dalam kaedah ContainedElementChanged
, parameter OnPropertyChanged
perlu menjadi contoh PropertyChangedEventArgs
baharu dan bukannya menggunakan e
secara langsung. Ini telah diperbetulkan dalam kod di atas. Ini memastikan bahawa nama sifat yang betul dihantar kepada pengendali acara.
Atas ialah kandungan terperinci Adakah ObservableCollection Wujud Yang Menjejaki Kedua-dua Koleksi dan Perubahan Harta Elemen?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!