数据绑定总是编组到UI线程吗?

bit*_*onk 3 data-binding silverlight wpf multithreading ui-thread

绑定到Silverlight 3和4中的属性时,Windows Phone 7版本的Silverlight和WPF 3.5和4中的属性更改通知是否总是被编组到UI线程?您是否知道我不能依赖它的任何场景,并且必须在我的代码中进行编组操作?

Luc*_*hik 7

我做了一些实验......

  1. INotifyPropertyChanged
    如果从后台线程更改属性,并从该后台线程触发INotifyPropertyChanged,并且属性是数据绑定,则...

    • WPF:它的工作原理(即数据手册将其封送到UI线程)
    • Silverlight5和WinRT:它失败了(即数据仓没有编组)
    • 电话:我认为它与Silverlight相同,但还没试过.
       
  2. DependencyProperty
    如果属性是依赖属性而不是INotifyPropertyChanged怎么办?如果从后台线程更改此属性该怎么办?好吧,我还没有做过任何实验,但我读到它没有做任何编组.

  3. INotifyCollectionChanged(例如ObservableCollection)
    如果你从后台线程中添加/删除ObservableCollection中的元素,并且该集合被数据绑定到列表框或类似内容,那么会发生什么?

    • WPF:从WPF4.5开始,您可以使用BindingOperations.EnableCollectionSynchronization(collection,new object()); 它会正确编组.然而,在WPF4.5之前,就像帕夫洛所说的那样.
    • Silverlight,WinRT:再次像Pavol说的那样.