2016-12-20 96 views
1

在我的場景中,我使用命令從數據庫中刪除了一些東西。我已經ReactiveCollection勢必DataGrid的WPF中,並按照處理刪除代碼:ReactiveCommand:在ThrownExceptions中獲取命令參數

RemoveProductCommand = ReactiveCommand.CreateFromTask<Product>(async product => 
      { 
       await _licensingModel.RemoveProduct(product.Id); 
      }); 


      RemoveProductCommand.ThrownExceptions.Subscribe(async ex => 
      { 
       await ShowToUserInteraction.Handle("Could not remove product "); 
      }); 

      Products.ItemsRemoved.Subscribe(async p => 
      { 
       await RemoveProductCommand.Execute(p); 
      }); 

我的問題是,有沒有獲得在ThrownExceptions產品(命令參數)內置的方式嗎?

我當然可以做這樣的事情:

RemoveProductCommand = ReactiveCommand.CreateFromTask<Product>(async product => 
      { 
       try 
       { 
        await _licensingModel.RemoveProduct(product.Id); 
       } 
       catch (Exception e) 
       { 
        throw new ProductRemoveException(product, e); 
       } 

      }); 

我的理由是,我想通知與信息用戶「無法刪除產品X」。

編輯: 好的,我編輯粘貼在這裏的代碼,並注意到等待command.Execute()和訂閱之間的區別。 是可能的:

Products.ItemsRemoved.Subscribe(async p => 
      { 
       try 
       { 
        await RemoveProductCommand.Execute(p); 
       } 
       catch (Exception e) 
       { 

       } 
      }); 

但什麼ThrownExceptions?

回答

1

我的問題是,是否有內置的方法獲取產品(命令參數)在ThrownExceptions?

沒有,ThrownExceptions是的IObservable <異常>,即你SUBCRIBE它得到的只有例外的流。它不知道在發生實際異常之前傳遞給命令的任何命令參數。

您將需要以某種方式自己存儲此參數值,例如通過從Execute方法中定義並拋出一個自定義Exception。

+0

太糟糕了,我希望統一解決方案,不管我如何調用命令 –