2009-03-02 13 views
7

WinFormsのデータバインディングについての助言やガイダンスが必要です.Googleでこれを手助けすることはできません。WinFormsのデータバインディング - リスト内のオブジェクトにバインドする

これは私のシナリオです。

public class Car 
{ 
    public string Name { get; set; } 
    public List<Tire> Tires { get; set; } 
} 

public class Tire 
{ 
    public double Pressure { get; set; } 
} 

私のインスタンスは、4つのTireオブジェクトを持つリストのCarクラスのオブジェクトになります。ここでは、常にリストにある既知の数のオブジェクトがあることに注意してください。

これを5つのテキストボックスを含むフォームにバインドします。車の名前が1つのテキストボックス、タイヤの圧力がそれぞれ1つのテキストボックス。

どのようにすればいいですか? VSのデザイナーは、Tires [0] .Pressureのようなリストインデックスに割り当てることでこれを設定することはできないようです。

私の現在のソリューションは次のようになります「BindableCar」と結合することである。

public class BindableCar 
{ 
    private Car _car; 

    public BindableCar(Car car) 
    { 
     _car = car; 
    } 

    public string Name 
    { 
     get { return _car.Name; } 
     set { _car.Name = value; } 
    } 

    public double Tire1Pressure 
    { 
     get { return _car.Tires[0].Pressure; } 
     set { _car.Tires[0].Pressure = value; } 
    } 

    public double Tire2Pressure 
    { 
     get { return _car.Tires[1].Pressure; } 
     set { _car.Tires[1].Pressure = value; } 
    } 

    public double Tire3Pressure 
    { 
     get { return _car.Tires[2].Pressure; } 
     set { _car.Tires[2].Pressure = value; } 
    } 

    public double Tire4Pressure 
    { 
     get { return _car.Tires[3].Pressure; } 
     set { _car.Tires[3].Pressure = value; } 
    } 
} 

が、私のリストは20の代わりに4のオブジェクトが含まれている場合、これは本当に醜いになり、私が欲しいこれらのオブジェクトのそれぞれについて、 6つの特性と結合する。それは巨大な "BindableObject"を作ります!

答えて

3

WinFormsデザイナーはこれをやらせないかもしれませんが、コードでバインディングを設定しようとしましたか? someCar.Tires [1] .Pressureにテキストボックスをバインドする際に問題はないと思います。

+0

いいえ、デザイナーのメッセージが表示されていないため、これはサポートされていないと私は想定していませんでした。私はできるだけ早くこれを試してみます。 –

-1

デザイナーの代わりにコードを使用してリストにバインドすることができます。 exampleです(数時間前から)。

17

あなたはインターフェースIListICollectionまたはIEnumerableを実装したり、これらのインタフェースを実装するクラスから継承任意のオブジェクト型にコントロールをバインドできることに注意してください。一般的なコレクションは、この種のバインディングにも適しています。

これらは内部でIBindingListインスタンスに変換されます。

詳細については、以下のリンクをチェックアウト:

  1. Roadmap for Windowsforms databindingは - 実装と可能性の非常に包括的な見てみると、他のKB記事へのリンクを数多く提供しています。
  2. Winforms Object binding - この件に関するRockford Lhotkaの記事。データバインディングを実装する、Windowsフォームのデザイナ指向の方法を提供します。
  3. Databinding with Windows forms 2.0 - Brian Noyesの本書は、複雑なシナリオとシンプルなシナリオの両方で、Databindingのさまざまな側面を探究しています。
+0

すばらしいリンクありがとう! –

+0

私の喜び! ;-) – Cerebrus

+0

メモ。最初のリンクでは、単純なオブジェクト以外のものにバインドするとき、後方スクロールのサポートが必要であるため、 "... Windowsフォームオブジェクトモデルは... IEnumerable'インターフェイスへのバインディングをサポートしていません。"あなたは 'IEnumerable'が自動的に' IBindingList'に変換されると言っています。 –

関連する問題