2009-03-02 69 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; } 
} 

我的這種情況下,將是汽車類的一個對象,具有四個輪胎對象名單。請注意,我將在此列表中始終有一個已知數量的對象。

現在我想將數據綁定到包含五個文本框的表單。一個帶有汽車名稱的文本框和一個帶有每個輪胎壓力的文本框。

關於如何使這項工作的任何想法? VS中的設計師似乎不允許我通過分配像輪胎[0],壓力這樣的列表索引來設置它。

我目前的解決方案是綁定到「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]。壓力。

+0

不,我沒有,因爲我認爲這是不支持由於設計師提示的消息。我會盡快嘗試。 – 2009-03-02 12:12:59

-1

您應該能夠通過代碼而不是設計器綁定到列表。這是一個example(從幾個小時前)。

17

你應該注意,您可以將控件綁定到實現該接口IListICollectionIEnumerable或實現這些接口的類繼承任何對象類型。泛型集合也適用於這種綁定。

這些內部轉換爲IBindingList實例。

退房有關更多信息,以下鏈接:

  1. Roadmap for Windowsforms databinding - 注意到在實施和可能性非常全面的外觀,並提供了多種鏈接到其他知識庫文章。
  2. Winforms Object binding - 羅克福德Lhotka的關於這個問題的文章。提供了一種實現數據綁定的Windows窗體設計器導向的方式。
  3. Databinding with Windows forms 2.0 - Brian Noyes撰寫的這本書探討了數據綁定的各個方面,包括複雜和簡單的情況。
+0

感謝您的好鏈接! – 2009-03-02 12:14:13