子どもの財産の変更による観察の制限に対処する
c#の標準ObservableCollection
は、アイテムの追加と削除のみを追跡します。 これらのアイテムが実装していても、これらのアイテムのプロパティの変更を本質的に監視するものではありません。これにより、子どものプロパティが変更されたときにUIバインディングが更新されないことにつながります。
INotifyPropertyChanged
これを解決するために、カスタムコレクションクラスを作成できます。と呼びましょう。
この改善されたクラスにより、アイテムが追加されると、TrulyObservableCollection
イベントを購読することが保証されます。 プロパティが変更されると、コレクション内のObservableCollection
メソッドがA
<code class="language-csharp">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))); } }</code>イベントから適切に登録されていないアイテムの削除。
PropertyChanged
を使用すると、アイテム自体とそのプロパティの両方の変更がデータバインディングに反映されることを保証し、より応答性が高く正確なUIになります。
以上が観察能力収集が子供の特性の変化を検出しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。