2009-03-02 10 views
7

Necesito ayuda/orientación sobre el enlace de datos de WinForms y parece que no puedo conseguir que Google me ayude con este.Enlace de datos de WinForms - Enlace a objetos en una lista

Aquí está mi situación. Tenga en cuenta las siguientes clases, que es similar a lo que necesito:

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

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

Mis instancias de este será un objeto de la clase de coche con una lista con cuatro objetos de neumáticos. Tenga en cuenta que siempre tendré una cantidad conocida de objetos en la lista aquí.

Ahora quiero que los datos se vinculen a un Formulario que contiene cinco cuadros de texto. Un cuadro de texto con el nombre del automóvil y un cuadro de texto con cada una de las presiones de los neumáticos.

¿Alguna idea de cómo hacer que esto funcione? El diseñador en VS no parece permitirme configurar esto al asignar a índices de lista como Neumáticos [0]. Presión.

Mi solución actual es para unirse a una "BindableCar" que sería como:

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

pero esto se hace realmente feo cuando mis listas contiene 20 en lugar de 4 objetos, y para cada uno de esos objetos que quiero para unir contra 6 propiedades. ¡Eso hace un enorme "BindableObject"!

Respuesta

3

Si bien el diseñador de WinForms puede no permitirle hacer esto, ¿ha intentado configurar el enlace en el código? Imagino que no hay ningún problema para vincular un cuadro de texto a algunos Car.Tires [1] .Presión.

+0

No, no he asumido que esto no era compatible debido al mensaje solicitado por el diseñador. Voy a intentar esto lo antes posible. –

-1

Debería poder unirse a una lista mediante código en lugar de al diseñador. Aquí hay un example (desde hace solo unas horas).

17

Debe tener en cuenta que se puede enlazar controles a cualquier tipo de objeto que implementa las interfaces IList, ICollection o IEnumerable o hereda de clases que implementan estas interfaces. Las colecciones genéricas también califican para este tipo de enlace.

Se convierten internamente a una instancia IBindingList.

Comprobar los siguientes enlaces para obtener más información:

  1. Roadmap for Windowsforms databinding - Toma una mirada muy amplia en la aplicación y las posibilidades y ofrece una variedad de enlaces a otros artículos de la BC.
  2. Winforms Object binding - Artículo de Rockford Lhotka sobre el tema. Proporciona una forma orientada al diseñador de formularios de Windows para implementar el enlace de datos.
  3. Databinding with Windows forms 2.0 - Este libro de Brian Noyes explora varios aspectos de Databinding, tanto en escenarios complejos como simples.
+0

¡Gracias por los excelentes enlaces! –

+0

¡Es un placer! ;-) – Cerebrus

+0

Una nota. En el primer enlace, dice que "... el modelo de objetos de Windows Forms no admite el enlace a la interfaz ... 'IEnumerable' porque se requiere compatibilidad con desplazamiento hacia atrás cuando se vincula a algo que no sea un objeto simple.". Usted dice que 'IEnumerable' se convertiría automáticamente a' IBindingList'. –

Cuestiones relacionadas