我创建了一个自定义属性[NotExistToAddConfiguration],并允许像这样指定我的ViewModel的属性:
[RaisePropertyChanged]
[Required(ErrorMessage = ErrorMessages.Required)]
public virtual string Pata_Idtab { get; set; }
[RaisePropertyChanged]
[Required(ErrorMessage = ErrorMessages.Required)]
[NotExistToAddConfiguration(ErrorMessage = "Existe Deja",_Pata_Idtab = Pata_Idtab)]
我的属性
public class NotExistToAddConfiguration : ValidationAttribute
{
public override bool IsValid(object value)
{
bool NotExist = false;
NotExist = DalConfiguration.GetIDNotExist(Convert.ToString(value).Trim(), _Pata_Idtab);
return NotExist;
}
public string _Pata_Idtab { get; set; }
public NotExistToAddConfiguration()
{
}
}
但它不起作用,一个想法?
答案 0 :(得分:0)
您的错误取决于Compiler Error CS0120。这意味着您正尝试从静态上下文访问非静态字段。
在代码中
[NotExistToAddConfiguration(ErrorMessage = "Existe Deja",_Pata_Idtab = Pata_Idtab)]
您无法访问对象变量,只能访问类变量(静态)。您可以更改代码以使用静态变量初始化_Pata_Idtab
或更改IsValid
方法以检查不带该字段的条件。
另请注意,WPF中没有对DataAnnotations的默认支持。有两种方法可以在WPF中实现验证。
使用基于异常的验证。在数据绑定表达式中,您可以打开异常验证,如下面的代码所示:
<TextBox Name=«age» Grid.Row=«1» Grid.Column=«1» Width=«200» Margin=«5» Text="{Binding Path=Age, ValidatesOnExceptions=true, NotifyOnValidationError=true, UpdateSourceTrigger=PropertyChanged}" />
在班级中实施IDataErrorInfo。 MSDN上有一个指南。
如果您有复杂的验证规则,需要很少的字段来检查一个条件,那么最好使用第二个验证实现。