web-dev-qa-db-ja.com

C#でデータバインディングを行うにはどうすればよいですか?

次のクラスがあります

 public class Car 
 {
 public Name {get;セットする;}
}

プログラムでこれをテキストボックスにバインドします。

それ、どうやったら出来るの?

暗闇での撮影:

 ... 
車car = new Car(); 
 TextEdit editBox = new TextEdit(); 
 editBox.DataBinding.Add( "Name"、car 、「車-名前」); 
 ... 

次のエラーが表示されます

「ターゲットコントロールのプロパティ 'Name'にバインドできません。

私は何を間違っているのですか、どうすればいいですか?私は、データバインディングの概念を理解するのがウェブ開発から来るのが少し難しいと感じています。

35
Xerx

あなたが欲しい

editBox.DataBindings.Add("Text", car, "Name");

最初のパラメーターは、データバインドするコントロールのプロパティの名前、2番目はデータソース、3番目のパラメーターはバインドするデータソースのプロパティです。

51
ageektrapped

構文を見ないで、私はそれがかなり確信している:

editBox.DataBinding.Add("Text", car, "Name");
11
Danimal
editBox.DataBinding.Add("Text", car, "Name");

最初の引数はコントロールプロパティの名前、2番目はバインドするオブジェクト、最後の引数はデータソースとして使用するオブジェクトプロパティの名前です。

7
Romain Verdier

あなたはデータバインディングラインが非常に近いでしょう

editBox.DataBinding.Add("Text", car, "Name");

この最初のパラメーターは、データバインドされる編集ボックスオブジェクトのプロパティです。 2番目のパラメーターはバインドするデータソースで、最後のパラメーターはバインドするデータソースのプロパティです。

データバインディングは一方向であるため、編集ボックスを変更すると車オブジェクトが更新されますが、車名を直接変更すると編集ボックスは更新されないことに注意してください。

6
John Hunter

試してください:

editBox.DataBinding.Add( "Text", car", "Name" );
3
TcKs

私は信じている

editBox.DataBindings.Add(new Binding( "Text"、car、 "Name"));

トリックを行う必要があります。試してみませんでしたが、そう思います。

3
itsmatt

C#4.6構文を使用:

editBox.DataBinding.Add(nameof(editBox.Text), car, nameof(car.Name));

車がnullの場合、上記のコードはリテラル文字列を使用してdatamember of carを表すよりも目立つ方法で失敗します

1
Graviton

TextEditコントロールの「名前」にバインドしようとしています。この名前は、プログラムでコントロールにアクセスするために使用され、バインドすることはできません。コントロールのテキストに対してバインドする必要があります。

1
user1228

以下は、プロパティとして使用できるジェネリッククラスであり、バインドされたコントロールがプロパティ値の変更をキャプチャするために使用する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のイベントを宣言すると、クラス変更イベントはコントロールのデータバインダーによってサブスクライブされます。

0
tofo

それは

 this.editBox.DataBindings.Add(new Binding("Text", car, "Name"));
0
Ramgy Borja