2

winform にバインドされたオブジェクトがあり、このオブジェクトは IDataErrorInfo を実装しています。エラープロバイダーがあります。問題は、aa プロパティのプロパティが変更されたときです。

年齢を変更しても問題ありません(つまり、ルールがチェックされ、正しく表示/削除されます)。しかし、役職を変更すると、エラーが表示/削除されません(実際、プロパティのタイトルは対象者に属していません)。どうすればチェックを実行できますか?

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; }
    }
4

1 に答える 1

0

Personクラスにプロパティを追加する場合:

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

次に、にバインドTextBoxJobTitleCurrentJobTitleます:

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

または、次のように をバインドしTextBoxJobTitleますbindingSourcePerson.CurrentJob

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

それはうまくいきますか?

于 2009-09-02T10:05:59.157 に答える