2011-01-13 8 views
2

Silverlight 3および4のプロパティにバインドすると、Windows Phone 7バージョンのSilverlightとWPF 3.5および4では、プロパティ変更通知が常にUIスレッドにマーシャリングされますか?私はそれに頼ることができず、自分のコードでマーシャリングをしなければならないシナリオを知っていますか?データバインディングは常にUIスレッドにマーシャリングしますか?

答えて

6

あなたがバックグラウンドスレッドからプロパティに変更を加えると、それはそのバックグラウンドスレッドからINotifyPropertyChangedのを発射し、プロパティがデータバインドさであるならば、私はいくつかの実験...


  1. をINotifyPropertyChangedのでした、そして...

    • WPF:それは(UIスレッドにすなわちのDataBinderマーシャルそれを)作品
    • Siのlverlight5とWinRT:失敗しました。データバインダーはマーシャリングしていません)
    • 電話:Silverlightと同じだと思いますが、試していません。
       
  2. たDependencyPropertyプロパティは依存関係プロパティは、INotifyPropertyChangedのではなく、ある場合はどうすれば
    ?バックグラウンドスレッドからこのプロパティを変更するとどうなりますか?さて、私は実験をしていませんが、マーシャリングはしません。

  3. INotifyCollectionChanged(例えばのObservableCollection)
    追加/バックグラウンドスレッドからのObservableCollectionの要素を削除し、コレクションはリストボックスまたは同様にデータバインドされている場合は、どうなりますか?

    • WPF:WPF4.5では、BindingOperations.EnableCollectionSynchronization(collection、new object())を使用できます。それは正しくマーシャルされます。しかし、WPF4.5より前はPavloが言った通りです。
    • Silverlight、WinRT:再びPavolと同じです。
       
2

はい、コレクション。観察可能なコレクションにバインドし、それを非UIスレッドから変更すると、例外が発生します。コレクションの変更をUIスレッドにマーシャリングする必要があります。

+0

あなたは離れて、コレクションから私は上記のすべてのフレームワークに安全だということを確認することができますか? – bitbonk

+0

私は確かにWPFのためだけに言うことができます。 Silverlightでチェックしていない。 –

関連する問題