ホームページ > バックエンド開発 > C++ > 要素プロパティの変更を監視する ObservableCollection を作成するにはどうすればよいですか?

要素プロパティの変更を監視する ObservableCollection を作成するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-07 16:37:46
オリジナル
696 人が閲覧しました

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

要素の変更を監視するObservableCollection

問題の説明

要素が INotifyPropertyChanged を実装し、コレクション自体がそれらの要素の変更を監視する ObservableCollection を想像してください。 ObservableCollection は存在しますが、この要件を正確に満たす既存のコレクションがあるかどうかは不明です。

解決策

ObservableCollectionEx クラス

提案されたソリューションでは、ObservableCollection の拡張機能である ObservableCollectionEx が導入されています。この実装では:

  • OnCollectionChanged: 追加または削除されたアイテムのイベント サブスクリプションを更新します。
  • ClearItems: 要素のプロパティ変更をクリアする前にサブスクライブを解除します。
  • サブスクライブ: 新しく追加された項目のプロパティ変更をサブスクライブします。
  • 購読解除: 削除されたアイテムのプロパティ変更を購読解除します。
  • ContainedElementChanged: 要素のプロパティの変更をコレクションに伝達します。

使用法

ObservableCollectionEx は次のように使用されます:

<code class="language-csharp">ObservableCollectionEx<Element> collection = new ObservableCollectionEx<Element>();
((INotifyPropertyChanged)collection).PropertyChanged += (x, y) => ReactToChange();</code>
ログイン後にコピー

メモ

この実装では、要素のプロパティが変更されるとコレクションの PropertyChanged イベントが発生しますが、混乱を招く可能性があります。したがって、そのような変更のために特別に追加のイベントを導入することができます。

さらに、BCL の ObservableCollection 実装は、INotifyPropertyChanged インターフェイスのみを明示的に公開します。イベントをサブスクライブするには、次のようにキャストする必要があります:

<code class="language-csharp">((INotifyPropertyChanged)collection).PropertyChanged += (x, y) => ReactToChange();</code>
ログイン後にコピー

PropertyChanged からサブスクライブを解除するには、イベント ハンドラーを null に設定する必要があることに注意してください:

<code class="language-csharp">collection.PropertyChanged -= (s, e) => { Trace.WriteLine("Changed " + e.PropertyName); };</code>
ログイン後にコピー

以上が要素プロパティの変更を監視する ObservableCollection を作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート