【发布时间】:2012-12-19 09:57:16
【问题描述】:
我查看了许多 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 友好的方式执行此操作。 This blog entry 提到了 用户错误 功能,但我找不到任何有关如何使用它的文档。我将如何在上面的示例中实现它?
编辑:我根据 Paul 在下面的回答发布了一个示例解决方案 on github。
【问题讨论】:
-
嘿韦恩,这太棒了!你介意把这个样本贡献给github.com/reactiveui/ReactiveUI.Samples(或者允许我这样做吗?)
-
嗨,Paul,非常欢迎您将它添加到您在 github 上的示例中。谢谢你的好框架。
-
我错了还是代码:
CalculateTheAnswer.ThrownExceptions.Select(exception => MessageBox.Show(exception.Message));缺少实际订阅?
标签: c# reactiveui