我正在使用MVVM,當模型計算一個位置的新背景時,它會告訴視圖模型它已更改。所以我想要做的是在每個新的背景下更新視圖,但我認爲Thread.Sleep會阻止主UI線程。WPF在循環中更新視圖
private void New_Background(object sender, BackgroundEventArgs e)
{
Application.Current.Dispatcher.InvokeAsync(new Action(() =>
{
Fields[e.Position].Background = e.Background; //update this position's background at every step
OnPropertyChanged("Background");
Thread.Sleep(50);
}));
}
有沒有辦法實現這個目標?順便說一下,如果我使用MessageBox.Show(...)而不是Thread.Sleep,它會更新每個消息框處的視圖。
*「......它告訴視圖模型,它的改變」 *你不覺得你的視圖模型可以反過來也通知認爲它已經改變,無需事件驅動的更新或定時器驅動的循環? – slugster
這就是爲什麼有「OnPropertyChanged(」背景「);」行,所以與視圖的綁定起作用。更新實際上是有效的,但對於Thread.Sleep,我認爲我阻止了UI線程,因此它不會更新。我正在尋找另一種方法。 –