私はこのトピックについてあまり経験がないので、これがあまり明確でない場合はご容赦ください。
セクションの ObservableCollection を持つポータブル クラス ライブラリを作成しました。各セクションにはアイテムの ObservableCollection があります。
これらのコレクションはどちらも、個別の Win8 アプリと WP8 アプリの UI にバインドされています。
UIがPCLクラスから更新されるように、これらのコレクションを正しく設定する正しい方法を見つけようとしています。
クラスがwin8プロジェクト内にある場合、Dispatcher.BeginInvokeのようなことができることはわかっていますが、これはPCLに変換されず、WP8プロジェクトで再利用することもできません.
このスレッド ( Dispatcher.Invoke または Dispatcher.RunAsync に相当するポータブル クラス ライブラリ) で、 SynchroniationContext クラスを発見しました。
メイン アプリの SynchroniationContext への参照を渡しました。更新されるオブジェクトが 1 つだけであるため、セクションにデータを入力するときにそれを行うことができます。
if (SynchronizationContext.Current == _synchronizationContext)
{
// Execute the CollectionChanged event on the current thread
UpdateSections(sections);
}
else
{
// Post the CollectionChanged event on the creator thread
_synchronizationContext.Post(UpdateSections, sections);
}
ただし、記事で同じことをしようとすると、セクションと記事の両方への参照が必要ですが、Post メソッドでは 1 つのオブジェクトしか渡すことができません。
ラムダ式を使用しようとしました:
if (SynchronizationContext.Current == _synchronizationContext)
{
// Execute the CollectionChanged event on the current thread
section.Items.Add(item);
}
else
{
// Post the CollectionChanged event on the creator thread
_synchronizationContext.Post((e) =>
{
section.Items.Add(item);
}, null);
}
しかし、「別のスレッドにマーシャリングされている」というエラーが発生しているため、これは正しくないと思います。
では、ここでどこが間違っているのでしょうか? 両方のアプリが UI も更新できるように、PCL から両方のコレクションを正しく更新するにはどうすればよいですか?
どうもありがとう!