2016-07-11 5 views
1

数値のアップダウンと配列要素の間にデータバインディングを作成しようとしています。私のフォームでは、以下に示すバインディングを作成しようとしましたが、動作しないようです。どんな助けもありがとう。特定のインデックスで配列の要素にコントロールをバインドするデータをWinforms

バインディング:

nudTest.DataBindings.Add("Value", eac.ESettings.HsvArray[0], "", false,DataSourceUpdateMode.OnPropertyChanged); 

アレイ:

public class ESettings : INotifyPropertyChanged 
{ 

    private int[] hsvArray = new int[6]; 

    public event PropertyChangedEventHandler PropertyChanged; 

      [XmlIgnore] 
    public bool PrgVarIsDirty 
    { 
     get { return prgVarIsDirty; } 
     set 
     { 
      prgVarIsDirty = value; 
      OnPropertyChanged("PrgVarIsDirty"); 
     } 
    } 

    public int[] HsvArray 
    { 
     get { return hsvArray; } 
     set 
     { 
      if (value != hsvArray) 
      { 
       prgVarIsDirty = true; 
       hsvArray = value; 
       OnPropertyChanged("HsvArray"); 
      } 

     } 
    } 


    // Create the OnPropertyChanged method to raise the event 
    protected void OnPropertyChanged(string name) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if (handler != null) 
     { 
      handler(this, new PropertyChangedEventArgs(name)); 
     } 
    } 
} 
+1

WinFormsはこのようなデータバインディングをサポートしていません –

+0

これを行う方法とは別の方法がありますか? – JSoothe

+0

コントロールを要素の要素に直接バインドするのではなく、要素に直接バインドする場合は、コントロールを配列にバインドし、CurrencyManagerの位置を配列の要素のインデックスに設定します。 –

答えて

1

あなたの代わりに要素に直接結合しようとしているのは、配列の要素にコントロールをバインドする、バインドコントロールに配列のPositionCurrencyManagerに設定し、配列内のその要素のインデックスに設定します。コードアレイにNumericUpDownに結合し、30を示す以下の実施例の場合、インデックス2の要素

を:

int[] array = new int[] { 10, 20, 30, 40 }; 
private void Form1_Load(object sender, EventArgs e) 
{ 
    this.numericUpDown1.DataBindings.Add("Value", array, ""); 
    ((BindingManagerBase)this.numericUpDown1.BindingContext[array]).Position = 2; 
} 

同じ結合はBindingSourceを用いて行うことができます。 arrayをバインディングソースのDataSourceと設定し、データバインディングのバインディングソースを使用するだけで十分です。次に特定の要素を表示するには、BindingSourcePositionと設定します。

関連する問題