实现 IDataErrorInfo 接口

Implementing IDataErrorInfo interface

我在使用这个界面时遇到了一些问题。在我的 class "Researcher" 中,它是 IDataErrorInfo 的一个实现,我写了这样的东西:

[Serializable]
public class Researcher : Person, IDeepCopy, IEnumerable, IComparable, IComparer, IDataErrorInfo, INotifyPropertyChanged
{
    public DateTime Date
    {
        get 
        { 
            return date; 
        }
        set
        {
            date = value;           
        }
    } 
    //...

    public string Error { get { return "Error Text"; } }

    public string this[string property]
    {
        get
        {
            string msg = null;
            if ((this.Date.Year < 1930 && this.Date.Year > 1990) && (this.projjects.Count < 0))
                msg = "Not Correct Date";

            return msg;

        }
    }
    //...
}

在我的 XAML 代码中:

<TextBox Name="birthday"
                     Grid.Row="2"
                     Grid.Column="1"
                     Text="{Binding Date,
                                    UpdateSourceTrigger=PropertyChanged,
                                    ValidatesOnDataErrors=True}" /> `

但这不会检查任何内容,我仍然可以在文本框中输入任何我想要的日期。有什么问题?

我建议将其更改为与此类似的内容

public string Error { get { return string.Empty; } }
public string this[string property]
{
    get
    {
        var msg = new StringBuilder();
        switch(property)
        {
            case "Date":
                if(Date <1930) msg.AppendLine("Date must be greater than 1930");
                if(Date >1990) msg.AppendLine("Date must be less than 1990");
                break;
            case "projjects":
                if(projjects.Count <= 0) msg.AppendLine("projjects must contain atleast 1 item");
                break;
        }

        return msg.ToString();
    }
}`

因为这允许您 return 有意义的错误并分别检查每个 属性

您还需要触发 属性 更改事件 所以改为

public DateTime Date
{
    get { return date; }
    set
    {
        date = value;
        PropertyChanged(this, new PropertyChangedArg("Date"); 
    }
} 

也需要