3

Silverlight 3および4のプロパティにバインドする場合、Windows Phone 7バージョンのSilverlightおよびWPF3.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 に答える