Pregunta

tengo la siguiente clase

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

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

¿Cómo puedo hacer eso?

Disparar en la oscuridad:

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

Obtuve el siguiente error

"No se puede vincular a la propiedad 'Nombre' en el control de destino.

¿Qué estoy haciendo mal y cómo debería hacerlo?Me resulta un poco difícil entender el concepto de enlace de datos proveniente del desarrollo web.

¿Fue útil?

Solución

Quieres

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

El primer parámetro es el nombre de la propiedad en el control que desea vincular a los datos, el segundo es la fuente de datos, el tercer parámetro es la propiedad de la fuente de datos a la que desea vincular.

Otros consejos

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

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

El primer argumento es el nombre de la propiedad de control, el segundo es el objeto a vincular y el último, el nombre de la propiedad del objeto que desea utilizar como fuente de datos.

Estás bastante cerca de la línea de enlaces de datos.

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

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

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

Intentar:

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

Creo que

editBox.DataBindings.Add(new Binding("Texto", coche, "Nombre"));

debería funcionar.No lo probé, pero creo que esa es la idea.

Estás intentando vincularte al "Nombre" del control TextEdit.El nombre se utiliza para acceder al control mediante programación y no se puede vincular a él.Debe ser vinculante con el Texto del control.

La siguiente es una clase genérica que se puede usar como propiedad e implementa INotifyPropertyChanged que usan los controles vinculados para capturar 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 este

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

..donde "Texto" es propiedad del cuadro de texto, "esto" es la instancia de formulario actual.

Una clase no tiene que heredar la clase INotifyPropertyChanged.Una vez que declare un evento de tipo System.ComponentModel.PropertyChangedEventHandler, el enlace de datos de controles se suscribirá al evento de cambio de clase.

Usando la sintaxis de C# 4.6:

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

Si car es nulo, entonces el código anterior fallará de una manera más notoria que usar una cadena literal para representar el datamember de car

es

 this.editBox.DataBindings.Add(new Binding("Text", car, "Name"));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top