我查看了许多 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 友好的方式执行此操作。此博客条目提到了用户错误功能,但我找不到任何有关如何使用它的文档。我将如何在上面的示例中实现它?
编辑:我已经根据 Paul 在下面的回答在 github上发布了一个示例解决方案。