ViewModel コンストラクターが TimerCallback でタイマーを設定する MVVM フレームワークに対して開発された WPF アプリケーションがあります。
TimerCallback は ObservableCollection を取得し、それを VM のフィールドに渡します。
Source プロパティが ObservableCollection に設定されている CollectionViewSource があります。コレクションのフィルタリングを有効にしたいので、CollectionViewSource を使用しています。
TimerCallback が ObservableCollection をローカル フィールドに渡そうとすると、CollectionViewSource の Source プロパティに例外 {"別のスレッドが所有しているため、呼び出し元のスレッドはこのオブジェクトにアクセスできません。"} が発生することがわかりました。
例外は理解できますが、2 つの問題があります。
- この問題を回避するにはどうすればよいですか?
- さらに重要なのは、CollectionViewSource を使用している場合にのみこの問題が発生するのはなぜですか? CollectionViewSource を削除して ObservableCollection をパブリック プロパティにすると、そのような例外は発生しません。
どんな助けでも大歓迎です!ありがとう、ドラミー