2

WPF Columns プロパティにバインドできないため、回避策は、この SO question/answer にDataGrid'sある添付プロパティを使用することです。私のビューモデルは を含む を公開し、この添付プロパティを介してにバインドします。ObservableCollectionDataGridColumnsDataGrid

バックグラウンド スレッドがコレクションの作成を担当しており、私はDispatcher.Invokeこれを使用して、スレッド化の問題を回避できると考えました。バックグラウンド スレッド自体は正常に動作しますが、上記の添付プロパティ コードで例外が発生します。

別のスレッドがこのオブジェクトを所有しているため、呼び出し元のスレッドはこのオブジェクトにアクセスできません。

( else ifAdd アクションを扱う 、具体的には の行dataGrid.Columns.Add(column);)。

何が間違っているのでしょうか?

4

1 に答える 1

1

.NET 4.5 を使用している場合、最も簡単なオプションはBindingOperations.EnableCollectionSynchronizationを使用することです。これにより、バインディングでの同期を気にすることなく、バックグラウンド スレッドでコレクションを直接更新できます。

それ以外の場合は、コレクションへのすべての変更がユーザー インターフェイス スレッドで発生することを確認する必要があります。The Helper Trinityやその他のプロジェクトのバインド コレクションなど、より洗練されたソリューションがありますが、使用は機能するDispatcher.Invokeはずです (正しいインスタンスを取得する場合)。Dispatcher

于 2013-01-30T17:21:28.720 に答える