19

ObservableCollection にバインドされたアイテムを含むリストボックスがあります。

ここで、viewModel 内から UI を更新する必要があります。ビューモデルからリストボックスへの参照がありません。

ObservableCollection から項目を削除または追加すると、UI が更新されます。

他のいくつかのロジックに基づいて、UI を更新する必要がありますが、ObservableCollection は同じです。

ObservableCollection に項目を追加または削除せずに UI を更新するにはどうすればよいですか?

ありがとう

4

3 に答える 3

25

アイテムの背景を変更したいという同様の問題がありましたが、明らかにアイテムもコレクションも変更されていません。

これは、次の呼び出しによって達成されました。

CollectionViewSource.GetDefaultView(your_collection_name).Refresh();

これにより、コレクションを変更せずにビューモデルからビューが更新されました

于 2016-04-23T13:23:26.583 に答える
24

コレクション内の項目を編集したために UI を変更する必要がある場合は、それらの項目がインターフェイスを実装するように手配する必要がありINotifyPropertyChangedます。コレクション内のオブジェクトにPropertyChangedイベントがある場合、UI は個々のアイテムからそのイベントをリッスンします。(可能であれば、コレクション内のアイテムを に変更することもできます。これDependencyObjectsによりDependencyProperties、同じ目的が達成されます。)

コレクションに関して何も変更されていないときに本当にUI の更新をトリガーする必要がある場合、その方法は手動でイベントを発生させることです。これはそのままでは実行できませんが、そのクラスから新しいコレクションを派生させ、新しいメソッド内からメソッドを呼び出すことができます。CollectionChangedObservableCollection<>protected OnCollectionChangedpublic

于 2012-05-08T20:05:17.467 に答える