我查看了一些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,因为当我运行上面的代码时,这个observable没有接收到任何项。我做错了什么?
我的第二个问题是,我该如何以MVVM友好的方式实现这个功能。这篇博客文章提到了一个用户错误的功能,但我找不到任何关于如何使用它的文档。我该如何将其实现到上面的示例中? 编辑:我已经发布了一个示例解决方案在github上,基于Paul下面的答案。
CalculateTheAnswer.ThrownExceptions.Select(exception => MessageBox.Show(exception.Message));
缺少实际的订阅? - kwesolowski