UserError
クラスで何が間違っているのか理解できません。
これは私のViewModel内のコードです:
this.CheckForUpdateCmd = new ReactiveAsyncCommand(Observable.Return(true));
UserError.RegisterHandler(
uerror =>
{
logger.Error(uerror.ErrorMessage, uerror.InnerException);
if (dlgService.ShowMessageBox(
this,
uerror.ErrorMessage,
ClientStrings.AboutVM_ErrorCheckUpdates,
MessageBoxButton.YesNo,
MessageBoxImage.Warning) == MessageBoxResult.Yes)
{
return Observable.
Return(RecoveryOptionResult.RetryOperation);
}
return Observable.
Return(RecoveryOptionResult.FailOperation);
});
this.
CheckForUpdateCmd.
ThrownExceptions.
SelectMany(ex =>
UserError.Throw(
ClientStrings.AboutVM_ErrorCheckUpdates,
ex)).
Subscribe(
recoverOption =>
{
if (recoverOption == RecoveryOptionResult.RetryOperation)
{
this.CheckForUpdateCmd.Execute(null);
}
});
((ReactiveAsyncCommand)this.CheckForUpdateCmd).
RegisterAsyncAction(_ =>
{
throw new Exception("TESTING 123");
});
Usererror.Throw
例外が非同期アクション内でスローされた後、それは私の内部に正しく伝播されSelectMany
ます。Throwメソッド内で、RxUIは次の引数例外をスローします:「recoveryOptionsという名前のこのプロパティのバッキングフィールドを宣言する必要があります」
私はこれを調査しましたが、UserErrorクラスには_RecoveryOptions
UserError自体から設定されているがあります。ただし、アプリのOnStartupイベントハンドラー内でこれを使用して、プロセス全体にレンチを投入しています。
RxApp.GetFieldNameForPropertyNameFunc = prop => prop.Length == 1 ? prop.ToLower() : char.ToLower(prop[0]) + prop.Substring(1);
基本的に、バッキングフィールドはアンダースコア/アッパーではなく小文字で始めたいと思います。これまでのところ、UserErrorを使おうとするまで、RxUIはこれを尊重してきました。ステップがありませんか、それともRxUIのバグですか?
これはリアクティブUI3.2.0用です