次のクラスがあります
public class Car { public Name {get;セットする;} }
プログラムでこれをテキストボックスにバインドします。
それ、どうやったら出来るの?
暗闇での撮影:
... 車car = new Car(); TextEdit editBox = new TextEdit(); editBox.DataBinding.Add( "Name"、car 、「車-名前」); ...
次のエラーが表示されます
「ターゲットコントロールのプロパティ 'Name'にバインドできません。
私は何を間違っているのですか、どうすればいいですか?私は、データバインディングの概念を理解するのがウェブ開発から来るのが少し難しいと感じています。
あなたが欲しい
editBox.DataBindings.Add("Text", car, "Name");
最初のパラメーターは、データバインドするコントロールのプロパティの名前、2番目はデータソース、3番目のパラメーターはバインドするデータソースのプロパティです。
構文を見ないで、私はそれがかなり確信している:
editBox.DataBinding.Add("Text", car, "Name");
editBox.DataBinding.Add("Text", car, "Name");
最初の引数はコントロールプロパティの名前、2番目はバインドするオブジェクト、最後の引数はデータソースとして使用するオブジェクトプロパティの名前です。
あなたはデータバインディングラインが非常に近いでしょう
editBox.DataBinding.Add("Text", car, "Name");
この最初のパラメーターは、データバインドされる編集ボックスオブジェクトのプロパティです。 2番目のパラメーターはバインドするデータソースで、最後のパラメーターはバインドするデータソースのプロパティです。
データバインディングは一方向であるため、編集ボックスを変更すると車オブジェクトが更新されますが、車名を直接変更すると編集ボックスは更新されないことに注意してください。
試してください:
editBox.DataBinding.Add( "Text", car", "Name" );
私は信じている
editBox.DataBindings.Add(new Binding( "Text"、car、 "Name"));
トリックを行う必要があります。試してみませんでしたが、そう思います。
C#4.6構文を使用:
editBox.DataBinding.Add(nameof(editBox.Text), car, nameof(car.Name));
車がnullの場合、上記のコードはリテラル文字列を使用してdatamember
of car
を表すよりも目立つ方法で失敗します
TextEditコントロールの「名前」にバインドしようとしています。この名前は、プログラムでコントロールにアクセスするために使用され、バインドすることはできません。コントロールのテキストに対してバインドする必要があります。
以下は、プロパティとして使用できるジェネリッククラスであり、バインドされたコントロールがプロパティ値の変更をキャプチャするために使用するINotifyPropertyChangedを実装します。
public class NotifyValue<datatype> : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged = delegate { };
datatype _value;
public datatype Value
{
get
{
return _value;
}
set
{
_value = value;
PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Value"));
}
}
}
次のように宣言できます。
public NotifyValue<int> myInteger = new NotifyValue<int>();
このようなテキストボックスに割り当てられています
Textbox1.DataBindings.Add(
"Text",
this,
"myInteger.Value",
false,
DataSourceUpdateMode.OnPropertyChanged
);
..ここで、「テキスト」はテキストボックスのプロパティであり、「これ」は現在のフォームインスタンスです。
クラスはINotifyPropertyChangedクラスを継承する必要はありません。タイプSystem.ComponentModel.PropertyChangedEventHandlerのイベントを宣言すると、クラス変更イベントはコントロールのデータバインダーによってサブスクライブされます。
それは
this.editBox.DataBindings.Add(new Binding("Text", car, "Name"));