私が最初にWPFを始めた主な理由は、データバインディングのすべての素晴らしい可能性の約束でした。何日もの頭痛の種の後で、私は最も一般的なシナリオの1つが不可能であると思い始めています、そして私は間違っていると証明されたいです!:)
- カスタムクラスのインスタンスをListItemsとして持つListBoxがあります。
- 私のクラスは、いくつかのDependencyPropertiesを実装することにより、DataBindingに対応しています。
- 私のリストボックスには、これらのプロパティを適切なレイアウトで表示するためのカスタムDataTemplateがあります。
- ListBoxのItemsSourceは
ObservableCollection<MyClass>
- リストボックスには数百、さらには数千のアイテムを表示する必要がある場合があるため、レスポンシブUIを維持するには、それらをバックグラウンドでインスタンス化する必要があります。
DependencyObjectsである限り、バックグラウンドスレッドでクラスのインスタンスを作成し、UIスレッドのObservableCollection(またはItemsSourceを省略した場合はリストボックスに直接)に追加することは不可能であることがわかりました。例外をスローします
DependencyObjectと同じスレッドにDependencySourceを作成する必要があります
WPFでこのようなシナリオをどのように処理する必要がありますか?DPをまったく使用せず、INotifyPropertyChangedを使用しますか?彼らがこれをする必要があるとき、人々は実際に何をしますか?これはかなり一般的なシナリオだと思います。「マゼンタ」と入力した場合にTextBoxの背景色を変更する可能性について、ほとんどのDataBinding関連の記事が乱雑になっていることに非常に腹を立てています... :)