今はプロパティが非同期/待機をサポートしていないことが分かりました。しかし、プロパティーセッターから追加のバックグラウンド処理を開始する必要がある場合もあります。MVVMシナリオでは、データバインディングが良い例です。データバインドされたプロパティ設定ツール内から非同期メソッドを呼び出す正しい方法はありますか?
私の場合、ListViewのSelectedItemにバインドされているプロパティがあります。もちろん、私は直ちに新しい値をバッキングフィールドに設定し、プロパティの主な作業が行われます。しかし、UIで選択された項目の変更は、現在選択されている項目に基づいていくつかの新しいデータを取得するためにRESTサービス呼び出しをトリガーする必要もあります。
私は非同期メソッドを呼び出す必要があります。私はそれを待つことはできませんが、非同期処理中に例外が発生する可能性があるため、呼び出しを忘れて忘れたくはありません。
が今私のテイクは以下の通りです:
private Feed selectedFeed;
public Feed SelectedFeed
{
get
{
return this.selectedFeed;
}
set
{
if (this.selectedFeed != value)
{
this.selectedFeed = value;
RaisePropertyChanged();
Task task = GetFeedArticles(value.Id);
task.ContinueWith(t =>
{
if (t.Status != TaskStatus.RanToCompletion)
{
MessengerInstance.Send<string>("Error description", "DisplayErrorNotification");
}
});
}
}
}
[OK]を事実のほかに、私は同期方法にセッターから取り扱いを移動できるので、これは、このようなシナリオを処理するための正しい方法は何ですか?私には見えない、より良い、あまり邪魔されない解決策がありますか?
この問題を解決するのに非常に興味がありますか。私は、この具体的な話題について他の議論を見つけることができず、データバインディングを大量に使用するMVVMアプリケーションでは私にとっては非常に共通しているように思うので、ちょっと不思議です。
REST要求の進行中に、ここでの注意する楽しい事はときにプロパティの変更を処理しています。特に、呼び出された順に完了することが保証されていないためです。 –
はい、それは当てはまります:)しかし、この問題は、プロパティセットを使用してREST呼び出しやイベントなどを開始しても問題は発生しません。私の取り組みは、選択したアイテムが新しいアイテムを送信する前に変更されたときに、まだ実行中のリクエストをすべてキャンセルすることです。 –
代わりに、選択された項目がUIによって変更されたかどうかを確認する代わりに、変更された項目を選択するコマンドをアタッチすることができます。 –