2008-09-22 8 views
34

que tienen la siguiente clase¿Cómo puedo hacer Databinding en C#?

 
public class Car 
{ 
    public Name {get; set;} 
} 

y quiero unir mediante programación a un cuadro de texto.

¿Cómo puedo hacer eso?

fotografías en la oscuridad:

 
... 
Car car = new Car(); 
TextEdit editBox = new TextEdit(); 
editBox.DataBinding.Add("Name", car, "Car - Name"); 
... 

me sale el siguiente error

"No se puede enlazar con el hotel fenomenal 'Nombre' en el control de destino

¿Qué soy yo. haciendo el mal y ¿cómo debería estar haciendo esto? Estoy descubriendo que el concepto de enlace de datos es un poco difícil de entender desde el desarrollo web.

Respuesta

49

¿Quieres

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

El primer parámetro es el nombre de la propiedad en el control que desea estar enlazado a datos, el segundo es la fuente de datos, el tercer parámetro es la propiedad en el origen de datos que quieres unirte a.

11

Sin mirar a la sintaxis, estoy bastante seguro de que es:

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

Usted está tratando de unirse al "Nombre" del control de edición de textos. El nombre se usa para acceder al control mediante programación y no puede vincularse. Debería vincularse con el Texto del control.

3

Probar:

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

Creo que

editBox.DataBindings.Add (nuevo enlace ("texto", coche, "Nombre"));

deberían hacer el truco. No lo probé, pero creo que esa es la idea.

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

primer argumento es el nombre de la propiedad de control, el segundo es el objeto de obligar, y el último, el nombre de la propiedad del objeto que desea utilizar como origen de datos.

6

Usted está muy cerca de la línea de enlaces de datos sería

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

Este primer parámetro es la propiedad de su objeto de cuadro de edición que se unirán datos. El segundo parámetro es la fuente de datos a la que se está vinculando y el último parámetro es la propiedad en la fuente de datos a la que desea vincularse.

Tenga en cuenta que el enlace de datos es de una manera, por lo que si cambia el cuadro de edición, el objeto se actualiza pero si cambia el nombre del automóvil directamente, el cuadro de edición no se actualiza.

0

La siguiente es una clase genérica que se puede utilizar como una propiedad e implementa INotifyPropertyChanged utilizado por los controles vinculados para capturar los cambios en el valor de la propiedad.

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

} 

Se puede declarar así:

public NotifyValue<int> myInteger = new NotifyValue<int>(); 

y asignado a un cuadro de texto como éste

Textbox1.DataBindings.Add(
    "Text", 
    this, 
    "myInteger.Value", 
    false, 
    DataSourceUpdateMode.OnPropertyChanged 
); 

..where "texto" es la propiedad de la caja de texto, 'esta 'es la instancia de formulario actual.

Una clase no tiene que heredar la clase INotifyPropertyChanged. Una vez que se declara un suceso de tipo System.ComponentModel.PropertyChangedEventHandler el evento de cambio de clase será suscrito por los controles DataBinder

0

El uso de C# 4.6 sintaxis:

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

si el coche es nulo, entonces el código anterior fallar de una manera más visible que el uso literal de cadena para representar la datamember de car

0

es

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