2009-09-16 54 views
0

我在我的一个类中实现了IDataErrorInfo来验证该类的属性。该属性绑定到我的wpf用户控件上的一个控件。 validataion工作正常,除了有一个重要的缺陷。在实现IDataErrorInfo之后,如何在更新之后验证clr属性?

它似乎是在属性更新之前调用IDataErrorInfo成员public string this [string columnName],所以当我检查被更改的属性的值时,它包含的值不是刚才输入的值。因此,验证总是落后一步。这意味着我无法检查刚才输入的错误值。

有没有什么办法强制这个验证在属性更新之后被调用,而不是之前。我曾尝试将UpdateSourceTrigger更改为LostFocus和PropertyChanged,但他们仍然在不同的时间报告以前的值。

谢谢。

+0

实际使用的一些XAML绑定会有帮助。同时我也想看看你是如何在BO中实施财产变更通知的。 – Trainee4Life 2009-09-18 18:38:36

+0

您能否请您显示您遇到此问题的某个特定属性的实现(不必介意它已生成)? – 2009-09-24 22:16:50

回答

3

在分配属性之前发送属性更改通知时,可以复制您引用的行为。

public string FirstName 
{ 
    get { return _firstName; } 
    set 
    { 
     if (this.PropertyChanged != null) 
     { 
      this.PropertyChanged 
       (this, new PropertyChangedEventArgs("FirstName")); 
     } 
     _firstName = value; 
    } 
} 

可能在实际设置值后调用更改通知可能会诀窍。而只是为了记录,我不会把属性改为这样的通知!

+0

好主意,但我使用LinqToSql作为模型,并且默认情况下属性更改通知是在设置值之后。 – HAdes 2009-09-21 17:56:29

相关问题