1

サーバーにいくつかの JSON API があり、それをチャットに使用したいと考えています。だから私はHttpWebRequest, Respond、...とデシリアライズを使用しObservableCollection<ChatMessage>ます。それはすべて大丈夫です。データコンテキストに追加されたクラスがあり、そのクラスには上記のコレクションが含まれています(ObservableCollection<ChatMessage> entriesそして、リストボックスにバインドされ、すべてが正常に表示されます。しばらくしてからそのファイルのコンテンツをサーバーにリロードしたい場合は、最初に作成したものすべてを作成しましたコレクションを新しいコレクションに置き換えentriesます.しかし、これは起動しPropertyChangedないかCollectionChanged、ビューはまだ古いコレクションにバインドされています.では、これの最良の「修正」は何ですか?

4

1 に答える 1

1

技術的には、コレクションは変更されません。新しいコレクションに置き換えられるため、CollectionChanged は発生しません。

ラッピング クラスに INotifyPropertyChanged を実装する必要があります。コレクションを置き換える場合は、PropertyChanged イベントを発生させて UI に通知します。

もう 1 つの解決策は、コレクションを置き換えるのではなく、その項目をクリアして新しいエントリをそのコレクションに追加することです。コレクション (古いものと新しいもの) を比較し、新しいエントリを追加したり、新しいリストになくなったものを削除したりすることで、よりスマートな方法でこれを行うことができます。

于 2012-10-11T09:33:46.030 に答える