Я просмотрел несколько образцов 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, потому что это наблюдаемое не получает никаких элементов, когда я запускаю код выше. Что я делаю неправильно?
Мой второй вопрос: как мне это сделать с помощью MVVM. В этой записи в блоге упоминается функция Ошибки пользователя, но я не могу найти документацию о том, как ее использовать. Как реализовать его в приведенном выше примере?
Изменить. Я опубликовал примерное решение в github на основе ответа Павла ниже.