2009-10-23 3 views
27

のバインディング私はタイプのフルーツのオブジェクトを格納し、基本的な性質を持っている:データはテキストボックス

Fruit food; 
public Fruit Food 
{ 
    get {return this.food;} 
    set 
    { 
     this.food= value; 
     this.RefreshDataBindings(); 
    } 
} 

public void RefreshDataBindings() 
{ 
    this.textBox.DataBindings.Clear(); 
    this.textBox.DataBindings.Add("Text", this.Food, "Name"); 
} 

だから私は、フォームの外this.Foodを設定し、それがUIに表示されます。

this.Foodを変更すると、正しく更新されます。プログラムでUIを変更した場合:

this.textBox.Text = "NewFruit"、これは更新されません。

これはなぜですか?私もFruit.NameのためにINotifyPropertyChangedを実装しましたが、それでも同じです。

答えて

54

は、私はあなたがINotifyPropertyChangedのを実装し、これにあなたのデータバインディングコードを変更オススメ:

this.textBox.DataBindings.Add("Text", 
           this.Food, 
           "Name", 
           false, 
           DataSourceUpdateMode.OnPropertyChanged); 

それはそれを修正します。

デフォルトのDataSourceUpdateModeOnValidationであるため、OnPropertyChangedを指定しないと、モデルオブジェクトは検証が完了するまで更新されません。

+0

ありがとうございます♥ –

-2

プロパティにデータバインドして、databoundプロパティに値を明示的に割り当てることはできません。

+0

ありがとう、なぜこれはできないのですか?私はそれが2つの方法だと思った? –

+0

Joan、それはWPFの(大幅に改善された)バインディングです。 WinFormsは比較的簡単です。 –

+0

Henk、ありがとうWinformsでこれを達成する方法を知っていますか?残念なことにwpfをこのプロジェクトに使用することはできません。 –

1

仲介者として機能し、バインディングを支援するには、bindingsourceオブジェクトが必要です。次に、ユーザーインターフェイスを更新する代わりに、下線モデルを更新します。

var model = (Fruit) bindingSource1.DataSource; 

model.FruitType = "oranges"; 

bindingSource.ResetBindings(); 

Windows FormsのBindingSourceと単純なデータバインディングを参照してください。テキストボックス

  • modelのプロパティ - - モデルオブジェクトここ
  • "Name"をコードを入力してください - モデルの値がどの

  • 0

    私たちは、次のコード

    • "Text"
      textBox1.DataBindings.Add("Text", model, "Name", false, DataSourceUpdateMode.OnPropertyChanged); 
      

      を使用することができますテキストボックスをバインドします。

    関連する問題