menangani batasan ObservableCollection dengan perubahan harta kanak -kanak
standard dalam C# hanya menjejaki penambahan dan penyingkiran item. Ia tidak memantau perubahan kepada sifat ObservableCollection
item tersebut, walaupun barang -barang tersebut dilaksanakan . Ini membawa kepada pengikatan UI yang tidak mengemas kini apabila harta kanak -kanak diubahsuai. INotifyPropertyChanged
diperbaiki ObservableCollection: penyelesaian 3
Kelas yang lebih baik ini memastikan bahawa apabila item ditambah, ia melanggan peristiwa TrulyObservableCollection
mereka. Apabila harta berubah, kaedah ObservableCollection
mencetuskan tindakan
public sealed class TrulyObservableCollection<T> : ObservableCollection<T> where T : INotifyPropertyChanged { public TrulyObservableCollection() : base() { } protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs e) { if (e.Action == NotifyCollectionChangedAction.Add) { foreach (T item in e.NewItems) { item.PropertyChanged += ItemPropertyChanged; } } else if (e.Action == NotifyCollectionChangedAction.Remove) { foreach (T item in e.OldItems) { item.PropertyChanged -= ItemPropertyChanged; } } base.OnCollectionChanged(e); } private void ItemPropertyChanged(object sender, PropertyChangedEventArgs e) { OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Replace, sender, sender, IndexOf((T)sender))); } }
PropertyChanged
Menggunakan ItemPropertyChanged
menjamin bahawa perubahan kepada kedua -dua item itu sendiri dan sifat mereka tercermin dalam pengikatan data anda, menghasilkan UI yang lebih responsif dan tepat. Replace
Atas ialah kandungan terperinci Kenapa tidak dapat diamati mengesan perubahan dalam sifat kanak -kanak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!