代码之家  ›  专栏  ›  技术社区  ›  Toto

C IDataerrorinfo和子属性

  •  2
  • Toto  · 技术社区  · 15 年前

    我有一个绑定到winform的对象,这个对象实现了idataerrorinfo。我有一个错误提供者。问题是当属性的属性发生更改时。

    更改年龄时没有问题(即规则已正确检查和显示/删除)。但是,当我更改作业标题时,错误不会显示/删除(实际上,属性标题不属于对象人员)。我怎样才能兑现这张支票?

    this.errorProvider1.DataSource = this.bindingSourcePerson;
    bindingSourcePerson.DataSource = new Person();
    textBoxAge.DataBindings.Add("Text", bindingSourcePerson, "Age");
    textBoxJobTitle.DataBindings.Add("Text", bindingSourcePerson, "CurrentJob.Title");
    
    public class Person : IDataErrorInfo
    {
        public double Age { get; set; }
        private Job _job = new Job();
        public Job CurrentJob { get { return _job; } set { _job = value; } }
    
        public string this[string columnName]
        {
            get
            {
                _lastError = "";
                switch (columnName)
                {
                    case "Age":
                    case "CurrentJob.Title":
                        if (!string.IsNullOrEmpty(CurrentJob.Title) && Age < 16)
                            _lastError = "Invalid job.";
                        break;
    
                    default: _lastError = "";
                        break;
    
                }
                return _lastError;
    
            }
        }
    
        private string _lastError = "";
        public string Error
        {
            get { return _lastError; }
        }
    
        public class Job
        {
            public string Title { get; set; }
        }
    
    1 回复  |  直到 13 年前
        1
  •  0
  •   manji    15 年前

    如果将属性添加到 Person 班级:

    public String CurrentJobTitle { get { return _job.Title; } }
    

    然后捆绑 TextBoxJobTitle CurrentJobTitle :

    textBoxJobTitle.DataBindings.Add("Text", bindingSourcePerson, "CurrentJobTitle");
    

    或者,绑定 文本框作业标题 bindingSourcePerson.CurrentJob 这样地:

    textBoxJobTitle.DataBindings.Add("Text", bindingSourcePerson.CurrentJob, "Title");
    

    能用吗?