参数中的MVVM CustomAttribute属性

时间:2016-04-06 07:44:24

标签: c# mvvm attributes

我创建了一个自定义属性[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()
    {

    }
}

但它不起作用,一个想法?

1 个答案:

答案 0 :(得分:0)

您的错误取决于Compiler Error CS0120。这意味着您正尝试从静态上下文访问非静态字段。

在代码中

[NotExistToAddConfiguration(ErrorMessage = "Existe Deja",_Pata_Idtab = Pata_Idtab)]

您无法访问对象变量,只能访问类变量(静态)。您可以更改代码以使用静态变量初始化_Pata_Idtab或更改IsValid方法以检查不带该字段的条件。

另请注意,WPF中没有对DataAnnotations的默认支持。有两种方法可以在WPF中实现验证。

  1. 使用基于异常的验证。在数据绑定表达式中,您可以打开异常验证,如下面的代码所示:

    <TextBox Name=«age» Grid.Row=«1» Grid.Column=«1» Width=«200» Margin=«5» Text="{Binding Path=Age, ValidatesOnExceptions=true, NotifyOnValidationError=true, UpdateSourceTrigger=PropertyChanged}" />
    
  2. 在班级中实施IDataErrorInfoMSDN上有一个指南。

  3. 如果您有复杂的验证规则,需要很少的字段来检查一个条件,那么最好使用第二个验证实现。