我々は、WPFアプリケーションを持って、私はコースののObservableCollectionを持って、私はそれで、部門オブジェクトを持っているのは、言わせて、各コースの内側に、私は教師ののObservableCollectionを持っており、各教師の内側に、私は学生ののObservableCollectionを持っている:WPFの親オブジェクトからの子供の変化を検出する方法は?
Department.cs ----のObservableCollectionコース
Course.cs ----のObservableCollection教師
Teacher.cs ----のObservableCollection学生
などStudent.cs ----名前、年齢、
これらの4つのクラスすべての実装INotifyPropertyChangedのは、彼ら自身によって正常に動作している、私が達成したいことは部門オブジェクトグラフ内のものは、それかどうか、変更されるたびに生徒の年齢が変更された、新しいコースが追加された、または教師が削除された、何か、全く知りたい、理想的にはDepartmentChangedのようなイベントを介して(理想的にはこれを1回だけ募る)実行中のアクション。
私はそれを行うためのきれいな方法を思いついています。 INotifyPropertyChangedはクラスのプロパティの変更のみを追跡し、ObservationCollectionはそのアイテムの1つが何か変更されているかどうかわかりません。すべてのプロパティがそれにサブスクライブ以来のPropertyChangedイベントの
foreach (var course in d.Courses){
foreach (var teacher in course.Teachers){
foreach (var student in teacher.Students){
((INotifyPropertyChanged)student).PropertyChanged += ...
}
teacher.Students.CollectionChanged += ...
}
}
しかし、想像することができるように、これは作成した多く、およびアクションが、私は教室でやってみたかった:
は、これまでのところ私は(擬似コード)のようなネストされたループを試してみました結局、何度も何度も実行されてしまいましたが、これは悪いことです。
私はその後、500に間隔を設定して(オブジェクトが変更されたかどうかを判断するために私たちのクラスのそれぞれは、(IsDirtyを持っている))、タイマーを使用してみました:
if(department != null && department.IsDirty()){
//call some long running Action here
}
これが動作しているようですが、どういうわけか私は感じますこのアプローチは間違っています。可能であればタイマーを避けたいと思っています。私は他の提案やアイデアを聞きたいです!
おかげで、
変更して同じ長時間実行する長い手順を実行します。この長い手順の性質は、あなたがもう少し具体的でなく、プロパティセットのプロパティ変更に対処することができないものは何ですか? – Paparazzi
[ObservableCollectionのこの実装を見て、コレクション内の要素の変更も監視します](http://stackoverflow.com/a/269113/620360)。 – LPL
@LPL、ありがとう、そのポストは面白そうだ、私は間違いなくもっとそれを勉強します。 – wliao