タイプFruitのオブジェクトを格納する基本プロパティがあります。
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"
、this.Foodは更新されません。
なぜこれができるのでしょうか? Fruit.NameにもINotifyPropertyChanged
を実装しましたが、それでも同じです。
INotifyPropertyChangedを実装し、データバインディングコードを次のように変更することをお勧めします。
this.textBox.DataBindings.Add("Text",
this.Food,
"Name",
false,
DataSourceUpdateMode.OnPropertyChanged);
それはそれを修正します。
デフォルトのDataSourceUpdateMode
はOnValidation
であるため、OnPropertyChanged
を指定しない場合、検証が完了するまでモデルオブジェクトは更新されません。
仲介者として機能し、バインディングを支援するには、bindingsourceオブジェクトが必要です。次に、ユーザーインターフェイスを更新する代わりに、下線モデルを更新します。
var model = (Fruit) bindingSource1.DataSource;
model.FruitType = "oranges";
bindingSource.ResetBindings();
Windows Forms のBindingSourceと単純なデータバインディングを参照してください。
次のコードを使用できます
textBox1.DataBindings.Add("Text", model, "Name", false, DataSourceUpdateMode.OnPropertyChanged);
どこ
"Text"
–テキストボックスのプロパティmodel
–モデルオブジェクトはここにコードを入力します"Name"
–テキストボックスをバインドするモデルの値。