3

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

4

2 回答 2

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 之前,正如 Pavlo 所说。
    • Silverlight,WinRT:再次和 Pavol 说的一样。
       
于 2013-02-02T21:00:37.253 回答
2

是的,收藏。当您绑定到可观察集合并从非 UI 线程更改它时,您将收到异常。您必须将集合更改编组到 UI 线程。

于 2011-01-13T09:26:33.960 回答