none
Databinding control a propeidades solo funciona la primera vez RRS feed

  • Pregunta

  • Hola,

    Al bindear controles a propiedades de un objeto solo se guarda el primer cambio en el control, después de ese primer cambio no actualiza la información que el usuario introduce en los controles.

    Por ejemplo, en el textbox nombre escribe Juan y al guardar el modelo en base de datos guarda Juan, si posteriormente, sin salir del formulario, el usuario escribe Pablo y pulsa guardar, se guarda en base de datos Pablo en lugar de Juan, pero si ahora, sin volver a abrir el formulario escribe el usuario Tomas, y pulsa guardar, ese cambio no queda reflejado en base de datos.

    El bindeo lo he creado asi:

    ctrl.DataBindings.Add("Text", _bindedModel, property, false, DataSourceUpdateMode.OnPropertyChanged)

    Donde _bindedModel es el objeto a guardar, property es el nombre de la propiedad del objeto.

    El modelo hereda del modelo base que es el que implementa la interfaz INotifyPropertyChanged de la siguiente manera

    public event PropertyChangedEventHandler PropertyChanged;

    public void InvokePropertyChanged(PropertyChangedEventArgs e)
            {
                PropertyChanged?.Invoke(this, e);
            }

    Las propiedades de los modelos están definidas:

    public string Nombre
            {
                get { return _nombre; }
                set
                {
                    _nombre = value;
                    InvokePropertyChanged(new PropertyChangedEventArgs("Nombre"));
                }
            }

    sábado, 5 de junio de 2021 15:42

Todas las respuestas

  • Hola McTinez

    Decis "el modelo hereda del modelo base que es el que implementa la interfaz INotifyPropertyChanged".

    Si no me equivoco, la clase que contiene el DataSource debe implementar directamente la interfaz.

    class DataSource : ClaseBase, INotifyPropertyChanged { }

    Saludos

    Pablo

    domingo, 6 de junio de 2021 20:06
  • Hola McTinez,

    ¿Alguna novedad sobre la consulta realizada?

    Gracias por usar los foros de MSDN.

    Eric Ruiz

    ____________________________

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN siéntase en la libertad de contactar MSDNFSF@microsoft.com.

    lunes, 7 de junio de 2021 14:09
    Moderador
  • Hola Pablito,

    Tampoco me funciona, no actualiza los valores. 

    La asignación del datasource lo realizo en una clase externa static, al abrir el formulario se realiza la llamada al método para enlazar las propiedades, pero sigue sin actualizar los cambios en los controles.

    Gracias y saludos.

    miércoles, 9 de junio de 2021 8:26
  • Pone punto de interrupción en el set de la propiedad y verifica que valor tiene antes del cambio, si se asigna el nuevo valor y si se invoca a evento propertyChanged 
    miércoles, 9 de junio de 2021 19:20
  • Hola,

    El evento propertychnaged si que se ejecuta y el valor en el set es el valor correcto, pero en el objeto que quiero guardar no se actualiza a ese valor.

    valor en el set de la propiedad nombre y en invokeProperty ="casa", en cambio el valor de esa propiedad en el objeto cuando lo voy a guardar ="piso".

    GRacias y saludos


    • Editado McTinez sábado, 12 de junio de 2021 6:52
    sábado, 12 de junio de 2021 6:29
  • Hola

    le activaste el modo de 2 vias, y que lo notificara

    <TextBox Name="txtvalue" 
             Text="{Binding ElementName=mySlider,
                    Path=Value, Mode=TwoWay,
                    UpdateSourceTrigger=PropertyChanged}"/>  

    sábado, 12 de junio de 2021 12:46
  • hola,

    Es un a plicación winforms o xamarin.

    Gracias

    lunes, 14 de junio de 2021 7:38