在我的场景中,我使用命令从DB中删除某些内容。我将ReactiveCollection绑定到WPF中的DataGrid,并使用以下代码来处理delete:
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”的信息。
编辑: 好吧,我编辑了在这里粘贴的代码,并注意到等待命令之间的区别.Execute()和Subscribing。 有可能:
Products.ItemsRemoved.Subscribe(async p =>
{
try
{
await RemoveProductCommand.Execute(p);
}
catch (Exception e)
{
}
});
但是ThrownExceptions呢?
答案 0 :(得分:1)
我的问题是,是否有一种在ThrownExceptions中获取产品(命令参数)的内置方法?
不,ThrownExceptions是一个IObservable&lt; Exception&gt;,即您订阅它以获取仅Exception的流。它不知道在发生实际异常之前传递给命令的任何命令参数。
您需要以某种方式自己存储此参数值,例如通过从Execute方法定义并抛出自定义Exception。