我無法理解我在做什麼錯誤UserError
類。UserError.Throw與非默認後臺字段命名約定
這是我的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拋出一個ArgumentException:「你必須爲這個屬性聲明一個名爲:recoveryOptions的後臺字段」
我已經調查了這個,並且UserError類有一個,它是從UserError本身設置的。不過,我扔扳手到整個過程中與本我的應用程序的OnStartup事件處理中:
RxApp.GetFieldNameForPropertyNameFunc = prop => prop.Length == 1 ? prop.ToLower() : char.ToLower(prop[0]) + prop.Substring(1);
基本上,我想我的支持字段用小寫字母開頭,而不是下劃線/上。到目前爲止,RxUI已經證實了這一點,直到我嘗試使用UserError。我是否錯過了一個步驟,或者這是RxUI中的錯誤?
這是無UI 3.2.0
感謝這方面的信息,保羅。並感謝ReactiveUI! –