[C#][WPF] ObservableCollectionを非同期で利用する際

WPFを利用する開発は、Model View ViewModelパターンで設計することが多いですよね。
その際、データバインディングは外せないので、必然的にObservableCollectionをよく用いると思います。

けれども、ObservableCollectionってディスパッチャに対して安全ではないという大きな問題があります。例えば、独自のスレッドでModelの追加、削除して、その通知をViewModelのNotifyCollectionChangedデリゲートで処理します。その処理の中でViewモデルのDataContextにModelの参照を渡すと、例外が発生します。

この問題を解決する手法はいろいろありますが、個人的に一押しな手法はHave worker thread update ObservableCollection that is bound to a ListCollectionViewですね。

一押しの理由は、

  • シンプルなコード
  • 適切なDispatcher取得方法。初めてこのコードを見たとき、こんなうまい手法があるんだと感動しました。

どうぞお試し下さいね。