c# - WPF 字段验证
问题描述
嗨,我是 C# 的新手,我创建了一个 WPF 表单,它接收 csv 并将其保存在数据库中。现在我想知道是否有一个Validation Library
我可以用来使这些字段检查更容易?就像我想实现一个必需的字段或其他东西,如果不需要该字段,它将引发错误。我怎样才能做到这一点?我已经阅读了一些类似这样的代码
[Required] // Not sure if this is the correct format
public string Name()
{
get;set;
}
所以基本上我在考虑一种中间件类型的验证,我只需将[Required]
属性放在模型类中,它就会为我进行验证。有这样的事吗?
更新:我通过验证的意思是,当我选择一个 csv 文件后,它将读取每行/列,现在每一列都将像 ex 一样进行验证。对于column[0]
(假设这是名称字段),那么当读取此字段并将其分配给变量时,应在继续分配给变量之前对其进行验证。不确定这是否可能更多它是这样的
string[] content = row.Split('|');
Customer customer = new Customer(content);
Lis<KeyValuePair<string, string>> rowList = Converter.ToKeyValuePair(customer);
这是该Customer
课程的代码
class Converter
{
public static List<KeyValuePair<string,string>> ToKeyValuePair(Customer customer)
{
List<KeyValuePair<string, string>> rowList = new List<keyValuePari<string, string>>();
rowList.Add(new KeyValuePair<string, string>('name', customer.Name));
}
return rowList;
}
// 类客户
class Customer
{
private string _name;
public Customer(string[] content)
{
this.Name = content[0];
}
[Required] // Maybe some auto validation here where when the property is accessed it should be validated immediately
public string Name
{
get { return _name; }
set {
// I'm thinking of some validation here?
_name = value;
}
}
}
正如您在我的示例中看到的那样,我希望每当this.Name = content[0]
访问属性 like 时,它都会自动验证内容是否具有价值
解决方案
没有内置的“验证库”。你应该INotifyDataErrorInfo
在你的类中实现接口:
public class Model
{
[Required(ErrorMessage = "You must enter a username.")]
[StringLength(10, MinimumLength = 4,
ErrorMessage = "The username must be between 4 and 10 characters long")]
[RegularExpression(@"^[a-zA-Z]+$", ErrorMessage = "The username must only contain letters (a-z, A-Z).")]
public string Username { get; set; }
[Required(ErrorMessage = "You must enter a name.")]
public string Name { get; set; }
}
public class ViewModel : INotifyDataErrorInfo
{
private readonly Dictionary<string, ICollection<string>>
_validationErrors = new Dictionary<string, ICollection<string>>();
private readonly Model _user = new Model();
public string Username
{
get { return _user.Username; }
set
{
_user.Username = value;
ValidateModelProperty(value, "Username");
}
}
public string Name
{
get { return _user.Name; }
set
{
_user.Name = value;
ValidateModelProperty(value, "Name");
}
}
protected void ValidateModelProperty(object value, string propertyName)
{
if (_validationErrors.ContainsKey(propertyName))
_validationErrors.Remove(propertyName);
ICollection<ValidationResult> validationResults = new List<ValidationResult>();
ValidationContext validationContext =
new ValidationContext(_user, null, null) { MemberName = propertyName };
if (!Validator.TryValidateProperty(value, validationContext, validationResults))
{
_validationErrors.Add(propertyName, new List<string>());
foreach (ValidationResult validationResult in validationResults)
{
_validationErrors[propertyName].Add(validationResult.ErrorMessage);
}
}
RaiseErrorsChanged(propertyName);
}
...
}
此博客文章中描述了 WPF 中的完整数据验证过程,包括如何实现此接口和使用数据注释验证数据的示例。请通读一遍,如果遇到更具体的问题,请随时提出另一个问题。
推荐阅读
- java - editText 中的 datPicker 格式错误
- javascript - 如何在没有 JavaScript 文本 ID 的内容文档正文下编写写入/编辑文本?
- python-3.x - 使用动态搜索和自动完成将旧值返回到组合框
- mongodb - monodb 可以用 $in 做到这一点,多个输入和固定条件,输出像分组结果
- reactjs - 第二次分派动作时不会触发 Saga
- python - `setattr` 在 CPython 中因 `AttributeError` 失败?
- java - 如何从 Java 中的 Scanner 清除输入的字符串?
- python - Visual Studio 没有更改为正确的 python 版本
- python - Python比较gz文件的内容
- html - 如何修复与图像和文本对齐的弹性框