2009-08-31 8 views
2

私はオブジェクトをwinformにバインドしていますが、このオブジェクトはIDataErrorInfoを実装しています。エラープロバイダがあります。問題は、プロパティのプロパティが変更されたときです。C#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; } 
    } 
+0

これがWPFの場合、私は、TextBoxのdatacontextをCurrentJobに設定し、それを検証すると言っていたでしょう...しかし、これもよく知りたいと思います。 – Botz3000

答えて

0

あなたPersonクラスにプロパティを追加する場合:このようなbindingSourcePerson.CurrentJobTextBoxJobTitleを結合し、

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

または::

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

、その後TextBoxJobTitleCurrentJobTitleをバインド

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

それは動作しますか?

+0

かなり確実に動作します。しかし、それを本当に好きではないと主なオブジェクトは30-40 "submember"を得た。 – Toto

+0

各サブモジュールを手動でテキストボックスにバインドする場合は、それぞれに1行以上の(ハード)コードを記述する必要があります。リフレクションを使用するときでさえ、テキストボックスとプロパティの間にどこかに "束縛"を書く必要があります。だから私は目標がちょうど1行のコードに到達することだと思っています(行の数は​​問題ではありませんが、ハードコードされていて退屈なのでそれ以降は変更しないでください)。あなたの-submemberのそれぞれに対して:あなたはできます:textBoxSubMember.DataBindings.Add( "Text"、mainObject.Submember、 "SubmemberProperty"); – manji

関連する問題