2011-06-21 74 views
2

DataGridのItemsSourceとしてデータバインディングにObservableCollectionを使用しています。コレクションには複合型オブジェクトが含まれます。このタイプのプロパティの1つは、文字列のリストです。リストを含むオブジェクトのObservableCollection

ちょうど今のところ、このリストプロパティをコードから更新しても、UIの変更はありません(プライマリバインディングは正常に動作します)。だから、私の質問です:それは期待された行動ですか?たぶん、型の一部としてListを使うべきではなく、ObservableCollectionを使うべきでしょうか?

更新

モードが一方向に設定されています。

+0

Jehofは正しいですが、(表示に応じて)HierarchicalDataTemplateを使用する必要があります。 –

+0

タイプは、ICollectionまたは別のインタフェースをプロパティとして公開する必要があります。バッキングフィールドは、ObservableCollectionなどのINotifyCollectionChangedを実装する必要があります。 –

答えて

0

をはいそれが予想される動作です。観察可能なコレクションは、それ自身の内容の変更、つまり追加、削除、並べ替えだけを通知します。

あなたが見ているのは、observablecollectionの要素の変更です。あなたが入れたクラスの変更を見たい場合、要素はINotifyPropertyChangedを実装する必要があります。

したがって、あなたのリストプロパティが複雑なオブジェクトの変更を表示していない場合は、それを表示することはできませんが、それをobservablecollectionに変更すると、コンボボックスのようなサブアイテムコントロールコレクションオブジェクトを別のコレクションオブジェクトに変更した場合ではなく、INotifyPropertyChangedを実装していない場合は、バインディングが適用される前にcollectionpropertyを設定する必要があります。

+0

これは、一時間前にObservableCollectionの代わりにList + INotifyPropertyObjectの全体構造(私には恥ずべきことです。私はあなたが私の問題の解決策として答えることをマークします。 – 26071986

0

あなたがあなたのリストをupdatedingされている場合uはリストの結果を更新します文句を言わないINotifyPropertyChange他の賢明なUIを呼び出す必要があります。..

INotifyPropertyChangeはここにいくつかの変更は、それを更新する項目ソースで発生したことを示すものです。

+0

古い値との比較が同じになるので、役に立たないでしょう。また、外部コレクションは変更されませんでした。ビュー(パフォーマンス)の内部コレクションを更新する必要はありません。** INotifyCollectionChanged **を実装する必要があります。 –

+0

@Dammy:INotifyCollectionChangedは間違いなく動作します..しかし、私はバインディングのためにINotifyCollectionChangedを使用してプロパティを処理しました。私が言ったことを知っていたやり方。 – Syeda

関連する問題