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

时间:2011-01-13 09:10:14

标签: wpf multithreading silverlight data-binding ui-thread

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

2 个答案:

答案 0 :(得分:7)

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

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

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

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

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

答案 1 :(得分:2)

是的,收藏品。绑定到可观察集合并从非UI线程更改它时,您将获得异常。您必须将集合更改封送到UI线程。