2010-12-18 6 views
0

私はビュー内のListBoxにバインドされたObservableCollectionを持っています。 私のViewModelはコマンドです。このコマンドでは、すべてのMyObjectを更新したいと思います。WPF - バックグラウンドでのデータのダウンロードUIにバインドされたオブジェクト

サンプルコード:

foreach(MyObject in List) 
myobject.Prop = HelperClass.downloadData(); 

downloaddata機能は、私は何も起こりませんいくつかの分間のコマンドを実行したときに...

をいくつかの時間がかかる...と、突然ビューが更新されます。

誰かが私を助けることができますか?

おかげ

+0

参照してくださいhttp://stackoverflow.com/questions/4759459/how-to-update-observablecollection-from-inside-a-backgroundworker-using-mvvm/4760266#4760266 –

答えて

0

ビューを描画するの世話をするスレッドをGUIアプリケーションを使用すると、イベントブロックのUIがフリーズします。このスレッドは、バックグラウンドワーカーを使用しようとするので、もしイベントを実行し、同じれる行っているとき:

BackgroundWoker bg = new BackGroundWorker(); 

bg.DoWork += (sender,args) => 
{ 

foreach(MyObject in List) 
myobject.Prop = HelperClass.downloadData(); 
}; 
bg.RunWorkerAsync(); 

BackgroundWorkerは、UIスレッドをリリースする別のスレッドで作業します。 このコードでUIの内容が変更されない場合は、作業項目をスレッドプールに単純にキューイングできます。

+0

これは機能しません...私はエラーが表示されます:DependencyObjectと同じスレッド上にDependencySourceを作成する必要があります。 – user547064

+0

UIスレッド内にバックグラウンドワーカーを作成して、UIのスレッド実行コンテキストを変更して変更する必要があります。 – DVD

+0

私はwindow.show()を呼び出した後でメインコードビハインドファイルにワーカを作成しました:( – user547064

関連する問題