2012-01-24 22 views
2

我有一個綁定到ViewModel中的屬性的WPF控件。令我驚訝的是(因爲這看起來不像WPF的廣告),從後臺線程中改變綁定屬性似乎沒有問題。我的UI更新沒有例外。爲什麼是這樣?更新來自後臺線程的綁定屬性或任何其他限制時是否存在性能問題?從後臺線程更新綁定屬性

+0

這就是爲什麼在可能的情況下綁定優先於使用調度程序的原因之一。 –

+0

它可能是調用主UI線程上的Invoke來更改UI – Epirocks

回答

2

WPF自動確保綁定在主線程上更新。

沒有性能問題。如果有什麼更好的做後臺線程上的屬性更新。將更新分派給主線程會增加在那裏完成的工作量。您將更新View和ViewModel,而不僅僅是View。差異通常應該忽略不計,但如果很多更新快速發生,那麼它可能會導致UI的響應速度更快降低。

2

這是因爲WPF需要關注將綁定數據編組到UI線程。 這隻適用於標量數據,盡我所知。對於集合,您必須注意在非UI和UI線程之間對其進行正確管理。

沒有明顯的開銷,因爲最終它應該做同樣的事情,你會在多線程(可能會稍微更優化的方式)。

1

這取決於。

它只會「自動」執行此操作(IIRC)以實現與實現INotifyPropertyChanged的屬性的綁定。 DependencyProperties和DependencyObjects具有線程相關性,如果嘗試從另一個線程更新它們,它將拋出。

Binding類有一個名爲IsAsync的屬性,它有助於在某些特殊情況下從另一個線程更新屬性,以便更新不會阻止UI。除非你這樣做,否則你並不需要它。