2013-01-17 51 views
2

我無法理解我在做什麼錯誤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.ThrowSelectMany內。在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

回答

1

這是一個old bug in ReactiveUI是早就已經固定 - 要麼升級到ReactiveUI 4.x的,或複製Errors.cs到您的項目,並使用該

+0

感謝這方面的信息,保羅。並感謝ReactiveUI! –