いくつかのReactiveUIサンプルを見回しましたが、ユーザーにメッセージを表示する必要がある例外を処理する方法の簡単な例がわかりません。(良い例があれば、誰かが私にそれを指摘できますか?)
私の最初の質問は、ReactiveCommandとToPropertyで例外を処理する方法です。たとえば、次のコードがあります。
public class MainWindowViewModel : ReactiveObject
{
public ReactiveCommand CalculateTheAnswer { get; set; }
public MainWindowViewModel()
{
CalculateTheAnswer = new ReactiveCommand();
CalculateTheAnswer
.SelectMany(_ => AnswerCalculator())
.ToProperty(this, x => x.TheAnswer);
CalculateTheAnswer.ThrownExceptions
.Select(exception => MessageBox.Show(exception.Message));
}
private readonly ObservableAsPropertyHelper<int> _theAnswer;
public int TheAnswer
{
get { return _theAnswer.Value; }
}
private static IObservable<int> AnswerCalculator()
{
var task = Task.Factory.StartNew(() =>
{
throw new ApplicationException("Unable to calculate answer, because I don't know what the question is");
return 42;
});
return task.ToObservable();
}
}
上記のコードを実行すると、このオブザーバブルはアイテムを受け取らないため、ThrownExceptionsを誤解しているに違いないと思います。私は何が間違っているのですか?
2番目の質問は、MVVMに適した方法でこれをどのように行うかです。このブログエントリでは、ユーザーエラー機能について言及していますが、その使用方法に関するドキュメントが見つかりません。上記の例にどのように実装しますか?
編集:以下のPaulの回答に基づいて、githubでソリューションの例を公開しました。