For*_*ter 5 c# validation wpf mvvm idataerrorinfo
开始使用所有这些MVVM的东西,我正在关注Josh Smith的这篇文章,该文章讨论了使用MVVM时的验证方法.这个例子很简单,我开始想知道如何在我自己的应用程序中使用它.
在我的BLL中,我有一个BookInfo实现IDataErrorInfo 的类来报告无效值,例如"发布日期不能在将来"或"页数不能为负".然后我AddBookViewModel会检查新创建的状态BookInfo,看看是否存在错误,并且AddBookView将在相应的TextBox旁边显示一个红色blob.那些东西很简单,就像帖子中的例子一样.
现在我的BookInfo班级还有一个作者ID列表.在我的数据库中添加新的BookInfo后,我需要检查这些作者ID是否已经存在.
这个检查应该在我的BookInfo课上完成吗?如果是这样,那么我必须将我的BLL AuthorManager对象传递给BookInfo构造函数,因为前者将包含诸如的方法CheckIfExists(int authorID).
这是推荐的方法吗?如果DB中有很多记录怎么办?动态检查会影响性能吗?
另一方面,在BookInfo课堂上和其他地方执行一些检查似乎有点混乱......特别是当所有这些检查都可以分类到同一组时...即.确保新创建的BookInfo对象有效.或者也许我错了,因为我没有经验来做出正确的判断.
一些指导?
小智 5
我同意Steven的观点,即您在尝试保存数据时应执行服务器端验证.
另一个原因是网络延迟.由于WPF对IDataErrorInfo的支持使用输入事件来确定何时验证属性,并导致对VM对象的阻塞/同步调用,因此使用IDataErrorInfo会直接影响UI的响应性.您无法开始对数据库执行异步调用以执行验证,然后在网络调用完成时将验证错误分派给UI线程.您必须对数据库进行阻塞调用才能获得结果,这可能会在等待调用返回时对UI线程造成严重破坏.
我希望有一天WPF能够获得Silverlight新的INotifyDataErrorInfo接口,它允许我上面描述的异步验证方案.
| 归档时间: |
|
| 查看次数: |
785 次 |
| 最近记录: |