在WPF中使用MVC验证

本文关键字:MVC 验证 WPF | 更新日期: 2023-09-27 18:07:02

我使用MVC与实体框架一段时间。现在我需要做一个wpf应用程序,我正在寻找一种方法来验证像模型状态在wpf

这是我的类的样子

public class Customer
{
    public int Id { get; set; }
    [Required]
    [MaxLength(100)]
    public string Name { get; set; }
    [MaxLength(100)]
    public string Address { get; set; }
    [MaxLength(20)]
    public string PhoneNumber { get; set; }
    [EmailAddress]
    public string Email { get; set; }
    public List<Order> Orders { get; set; }
}

有什么简单的方法可以让我检查它是否有效?

我真正想避免的是必须编写所有的验证规则

在WPF中使用MVC验证

不幸的是,我不得不创建一个名为IValidateable的接口,它扩展了INotifyDataErrorInfo,我在其中定义了一个方法Validate,我可以将属性名称传递给或留空以验证整个对象。

INotifyDataErrorInfo是一个。net接口,允许异步验证,并且已经有一个属性HasErrors,用于在验证后检查对象。

然后我在一个基类中实现了所有需要的方法,当我需要验证整个对象时,这个基类使用反射列出属性,然后验证每个属性。

在基类中,我有一个像这样的虚方法:

protected virtual void PerformValidation (String Property) {}

我的模型覆盖此方法并执行所需的特定验证。这个方法不需要重写,正如我所说,你可以在基类中添加对属性的支持。

如果你不需要异步验证,你可以扩展IDataErrorInfo而不是INotifyDataErrorInfo。

然后我可以这样做:

 SomeModel.Validate ();
 if (SomeModel.HasErrors)
     Do Something...

或:

if (!SomeModel.Validate ())
    Do Something...