如何在SL4中将业务层异常转换为验证错误?

时间:2010-07-01 01:59:21

标签: silverlight validation mvvm ria

我是Silverlight和RIA的新手。但是,我们正在开发一个带有SL前端的应用程序,使用WCF / RIA连接到我们的服务层。我们正在使用mvvm模式,因此也可以使用它。

我有一个特定的数据表,我使用命令挂钩数据表的EditEnding事件。在EditEnding中,我调用我的服务来保存编辑的对象。该服务对该对象执行一些重要的验证,并且当前抛出我在viewmodel中捕获并使用MessageBox显示的异常。

我想将这些异常显示为验证错误,而不是使用messagebox显示它们。我已经看过一些关于SL4s新的INotifyDataErrorInfo的文章,也许这是一个解决方案;但我对如何实际实施这一点感到困惑。另一件事是我得到的印象是,INotifyDataErrorInfo用于导致“立即”属性验证(一次一个属性),而不是允许用户按下“提交”按钮时验证服务层中的整个对象

由于我们的用户和他们的高延迟问题,我有一个要求是应用程序不是太健谈。因此,我不希望客户端为数据表中正在编辑的每个属性调用服务。

任何人都可以阐明如何实现这一目标吗?

提前致谢!

2 个答案:

答案 0 :(得分:0)

如果没有详细了解viewmodel命令如何与业务对象进行交互以及如何显示错误,那么这是我的建议......

如果要在命令执行方法中捕获验证错误时在视图上显示格式错误的一组错误,请将它们添加到可以在视图上绑定的可观察集合中。这可能只是一个绑定到集合的列表框,当您尝试保存下次可以清除集合时。

对于INotifyDataErrorInfo,它实际上是用于简单验证和快速响应,因为每次绑定属性更改时UI都会调用它,因此不是通过网络调用服务的好地方。

HTH

答案 1 :(得分:0)

当您想要时,屏幕上会显示带有INotifyDataerrors错误的

。只要您的Vie Model引发一个事件,通知接口已发现新错误。

不幸的是,Rias服务为您实现了INotifyDataErrors,它们只使用来自数据注释的错误。因此,如果要使用Ria服务,则需要编写自定义数据注释以评估所有错误。在类级别还有数据注释。您可以使用数据注释验证任何转义。此外,如果您没有为此数据注释提供.share.cs扩展名,则它们将仅用于服务器端,而不是用于客户端... 有关更多信息,请阅读我的博客here上的数据注释系列帖子。 如果你想使用异常请使用我的验证工具包用于WPF和silverlight而不是Ria服务。它可以在codeplex here上免费使用。