2010-12-18 106 views
0

我有一個ObservableCollection,它綁定到我的視圖中的ListBox。 在我的ViewModel是一個命令。在這個命令中,我想更新所有的MyObjects。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 – 2011-01-22 15:20:33

回答

0

做GUI應用程序時需要繪製視圖的照顧線程運行的事件,所以如果你在一個事件塊這個線程的用戶界面將凍結,嘗試使用背景工人一樣:

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 2010-12-18 16:48:23

+0

您需要在UI線程內創建後臺工作程序,以便它複製UI的線程執行上下文以對其進行更改。 – DVD 2010-12-18 16:59:28

+0

我在後面的主代碼文件後創建了工作,我叫window.show():( – user547064 2010-12-18 17:30:18