首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实现IDataErrorInfo接口

实现IDataErrorInfo接口
EN

Stack Overflow用户
提问于 2016-04-04 13:33:00
回答 1查看 2.2K关注 0票数 0

我在使用这个界面时遇到了一些问题。在我的课堂上,“研究员”是IDataErrorInfo的一个实现,我写了这样的东西:

代码语言:javascript
复制
[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代码中:

代码语言:javascript
复制
<TextBox Name="birthday"
                     Grid.Row="2"
                     Grid.Column="1"
                     Text="{Binding Date,
                                    UpdateSourceTrigger=PropertyChanged,
                                    ValidatesOnDataErrors=True}" /> `

但是这没有检查任何东西,而且我仍然可以在TextBox中输入我想要的任何日期。有什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-04 14:01:06

我建议把它改为类似的东西

代码语言:javascript
复制
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();
    }
}`

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

此外,您还需要触发属性更改事件,以便更改为

代码语言:javascript
复制
public DateTime Date
{
    get { return date; }
    set
    {
        date = value;
        PropertyChanged(this, new PropertyChangedArg("Date"); 
    }
} 

也需要

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36404177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档