我在INotifyPropertyChanged
(BackgroundWorker
)内意外更改了实现BackgroundWorker.DoWork
的BusinessObject属性的值。
令人惊讶的是,这导致了一个错误,但实现了绑定到该属性的TextBlock的文本而没有任何抱怨。
异步绑定的执行是否是WPF绑定引擎的一部分,或者这只是由于其他考虑而忘记或忽略CheckAccess测试的特殊情况。
答案 0 :(得分:3)
标量属性上的绑定支持来自其他线程的更新,因此在更新模型(或ViewModel)的属性时无需调用Dispatcher.Invoke
。但是,绑定到集合时不是这样:如果ItemsControl
绑定到ObservableCollection<T>
,则对此集合的更改必须在UI线程上完成,如CollectionChanged
个事件不会自动转发到UI线程。或者,您可以使用ObservableCollection<T>
的变体在UI线程上引发事件(here's a implementation)