2009-05-06 11 views
1

私は、試練プロジェクトでDataBindingで遊ぶのがちょっと残っています。私はフォームのメンバーにバインドしたいだけのスピンボックスを持つ単純なフォームを持っています。 VS IDEでVS2008双方向データバインディング:それを動作させるには?

class Form1 { 
    public class Data : System.ComponentModel.INotifyPropertyChanged { 
     int _value = 10; 
     public int value {get;set;} 
     public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; 

    } 

    public Data data; // the member I want to bind to 

} 

、私のスピンボックスのプロパティのデータ部は、スピンボックスは10で初期化されていない私は、データソースとしてForm1.dataを選択することができますが、

  1. 私が期待する通り
  2. スピンボックスの値を変更しても、Data.valueの取得/設定は行われません。

そして、私はそれだけでは生きられません。何か案は?

public class Data : INotifyPropertyChanged { 
    int _value = 10; 
    public int Value { 
     get {return _value;} 
     set { 
      if(value != _value) { 
       _value = value; 
       OnPropertyChanged("Value"); 
      } 
     } 
    } 
    protected virtual void OnPropertyChanged(string propertyName) { 
     var handler = PropertyChanged; 
     if(handler != null) { 
       handler(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
    public event PropertyChangedEventHandler PropertyChanged; 
} 

しかし、他の(制御用: - - 自動的に実装プロパティを約INotifyPropertyChangedを気にしない、あなたはそれを移動する必要がありますあなたのイベントは発生しません:オブジェクト=>コントロールの更新について

答えて

1

=>オブジェクト)、私はあなたが正しくバインディング設定を持っていないと思う。あなたはData.Valueプロパティにバインドする必要があり、実行時に、あなたのDataインスタンスについて、それを伝える必要があります:

someBindingSource.DataSource = data; 

それとも直接DataBindingsを使用している場合 - 以下は、それは上記のタイプの作業を示しています。

static class Program { 
    [STAThread] 
    static void Main() { 
     Application.EnableVisualStyles(); 

     Data data = new Data(); 
     data.PropertyChanged += delegate { 
      Debug.WriteLine("Value changed: " + data.Value); 
     }; 
     Button btn; 
     NumericUpDown nud; 
     Form form = new Form { 
      Controls = { 
       (nud = new NumericUpDown()), 
       (btn = new Button { 
        Text = "Obj->Control", 
        Dock = DockStyle.Bottom }) 
      } 
     }; 
     nud.DataBindings.Add("Value", data, "Value", 
         false, DataSourceUpdateMode.OnPropertyChanged); 
     btn.Click += delegate { data.Value++; }; 
     Application.Run(form); 
    } 
} 
関連する問題