[英]WPF MVVM Updating UI Bound properties from BackgroundWorker
從Backgroundworker更新ViewModel的UI綁定屬性是否存在任何潛在問題? 我正在嘗試在綁定到UI時更新VM,並且可能用戶可能正在鍵入...同步如何工作(我不認為我可以使用來自XAML的Lock語句)。
提前致謝..
更新標量屬性時,您無需擔心在UI線程上執行此操作。 PropertyChanged
事件自動編組到UI線程。
但是,它不適用於實現INotifyCollectionChanged
集合。 CollectionChanged
事件不會被編組到UI線程,它將導致異常。 因此,如果修改綁定到ItemsControl
的集合,則需要使用Dispatcher.Invoke
(或其他同步機制)在UI線程上執行此操作。 另一種選擇是使用專門的集合來處理將事件編組到正確的線程。 有關此類集合的示例,請參閱此文章 。
根據我使用Silverlight的經驗,嘗試這樣做會導致異常。
基本上,您需要從調度程序線程更新綁定屬性,就像您直接修改UI一樣。
為了允許ViewModel在不知道真正的Dispatcher
情況下這樣做,我發現創建一個IDispatcher
接口很有用,然后使用SameThreadDispatcher
進行測試,使用SystemDispatcher
(委托真實的)進行生產。 然后,您將ViewModel作為依賴項傳遞給IDispatcher
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.