36

私は次のクラスを持っています

一般クラスの車
{
   公開名 {get; 設定;}
}

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

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

暗闇での撮影:

...
車 car = new Car();
TextEdit editBox = new TextEdit();
editBox.DataBinding.Add("名前", 車, "車 - 名前");
...

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

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

私は何を間違っていますか、どうすればよいですか? Web 開発に由来するデータバインディングの概念を把握するのが少し難しいと感じています。

4

10 に答える 10

53

あなたが欲しい

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

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

于 2008-09-22T15:05:02.097 に答える
11

構文を見なくても、次のようになっていると確信しています。

editBox.DataBinding.Add("Text", car, "Name");
于 2008-09-22T15:04:45.543 に答える
7
editBox.DataBinding.Add("Text", car, "Name");

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

于 2008-09-22T15:07:01.873 に答える
6

あなたはデータバインディングラインに非常に近いです

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

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

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

于 2008-09-22T15:17:56.183 に答える
3

試す:

editBox.DataBinding.Add( "Text", car", "Name" );
于 2008-09-22T15:05:08.320 に答える
3

私は信じている

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

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

于 2008-09-22T15:06:18.427 に答える
1

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

于 2008-09-22T15:04:51.470 に答える
0

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

于 2016-10-03T13:32:09.350 に答える