2009-03-02 9 views
7

Ho bisogno di aiuto/guida sull'associazione dati WinForms e non riesco a convincere Google ad aiutarmi con questo.Associazione dati WinForms - Associazione agli oggetti in un elenco

Ecco il mio scenario. Prendere in considerazione le seguenti classi, che è simile a quello che mi serve:

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

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

mie istanze di questo sarà un oggetto della classe auto con una lista con quattro oggetti pneumatici. Tieni presente che avrò sempre un numero noto di oggetti nell'elenco qui.

Ora desidero associare i dati a un modulo contenente cinque caselle di testo. Una casella di testo con il nome della vettura e una casella di testo con ciascuna pressione delle gomme.

Qualche idea su come farlo funzionare? Il progettista di VS non sembra consentirmi di configurarlo assegnando elenchi come Tires [0] .Pressure.

La mia soluzione attuale è quella di legarsi ad un "BindableCar", che sarebbe come:

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; } 
    } 
} 

ma questo diventa davvero brutto quando le mie liste contiene 20 invece di 4 oggetti, e per ciascuno di quegli oggetti che voglio legare contro 6 proprietà. Questo rende un enorme "BindableObject"!

risposta

3

Mentre il progettista WinForms potrebbe non consentirvi di eseguire questa operazione, avete provato a impostare il codice di associazione? Immagino che non ci siano problemi a legare una casella di testo a someCar.Tires [1] .Pressure.

+0

No, non ho come presumo che questo non è stato supportato a causa del messaggio richiesto dal progettista. Ci proverò il prima possibile. –

-1

Dovresti essere in grado di eseguire il binding a un elenco tramite codice anziché dal designer. Ecco uno example (da poche ore fa).

17

Si dovrebbe notare che è possibile associare controlli per qualsiasi tipo oggetto che implementa le interfacce IList, ICollection o IEnumerable o eredita da classi che implementano queste interfacce. Le raccolte generiche si qualificano anche per questo tipo di rilegatura.

Questi sono convertiti internamente in un'istanza IBindingList.

Scopri i seguenti link per ulteriori informazioni:

  1. Roadmap for Windowsforms databinding - getta uno sguardo molto completo alla implementazione e possibilità e fornisce una varietà di collegamenti ad altri articoli KB.
  2. Winforms Object binding - L'articolo di Rockford Lhotka sull'argomento. Fornisce un modo di progettare orientato ai moduli di Windows per l'applicazione del databinding.
  3. Databinding with Windows forms 2.0 - Questo libro di Brian Noyes esplora vari aspetti del Databinding, sia in scenari complessi che semplici.
+0

Grazie per gli ottimi link! –

+0

Il mio piacere! ;-) – Cerebrus

+0

Una nota. Nel primo collegamento, si afferma che "... il modello a oggetti di Windows Form non supporta l'associazione all'interfaccia ...' IEnumerable' perché è richiesto il supporto per lo scorrimento all'indietro quando ci si lega a qualcosa di diverso da un oggetto semplice. ". Tu dici che 'IEnumerable' verrebbe automaticamente convertito in' IBindingList'. –

Problemi correlati