我有一个Silverlight应用程序,它通过DataBinding从WCF服务加载实体。
所以我有很多文本框的视图,其文本框内容绑定到实体属性。
我想使用Silverlight验证,我不想使用异常方式(我有一些具有很多属性的实体......我不希望每次在表单中使用它时都重复它...)。
所以我正在尝试使用IDataErrorInfo方式,但我不知道该怎么做。
我认为我应该声明一个客户端模型,它具有与服务EF模型等效的类,但实现了IDataErrorInfo。此解决方案意味着复制模型代码并以任何方式从服务模型转换为客户端模型。
另一个解决方案可能是更改EF模型本身,但我不知道这对MVVM是否正确(这非常接近视图,不是吗)。
也许还有另一种我不知道的神奇解决方案。
有什么建议吗?
答案 0 :(得分:2)
推荐的界面实际上是INotifyDataErrorInfo
这为您提供了更多控制并支持多个错误。当您手动想要控制何时进行验证时,在场景中使用它也会更容易一些。
基本上,通过这种方式,您可以在“客户端”对象上创建一个验证方法,该方法遍历其属性,验证每个对象,并构建错误列表。 (HasErrors变为true,您通知ErrorsChanged
,然后绑定到您的对象的代码GetErrors
。
通过这种方式,您可以构建验证引擎并让每个EF对象轮询您的数据库以获取验证规则。
还有:http://msdn.microsoft.com/en-us/magazine/ee335695.aspx 如果您可以选择在客户端注释您的EF类而不是简单地使用生成的类,那么您可以在此处找到一个简单的解决方案。
答案 1 :(得分:1)
我知道这有点偏离主题,因为你正在使用WCF 但如果您使用RIA服务,那么它会从您的EF生成对象,您只需在RIA中为它们添加一些属性(它附带注释,告诉您要使用哪些属性) 而且非常简单。
但只有在您使用RIA时,该建议才有意义。