es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La vinculación de datos de una aplicación WPF funciona durante la inicialización, pero no durante la actualización.

Estoy trabajando en una aplicación WPF y estoy tratando de actualizar el texto en la interfaz de usuario después de que se haya presionado un botón. La vinculación de datos funciona para la inicialización, pero cuando intento cambiar el texto en el código después de que se ha presionado el botón, no se actualiza.

public class UpdateWindow : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    private string _textStatus;
    private readonly DeviceConnection deviceConnection = new DeviceConnection();
    private readonly GetFile getFile = new GetFile();


    public UpdateWindow()
    {
        TextStatus = "Esto actualizará el texto";
    }

    //El botón llama a esta función WriteCommand
    public void WriteCommand()
    {
        TextStatus = "El texto en la interfaz de usuario debería actualizarse aquí pero no lo hace";
        if (getFile.FindFile())
        {
            if (deviceConnection.CheckDeviceConnection())
            {
                //hacer algo
            }
            else
            {
                //hacer algo más
            }
        }
    }

    protected bool SetProperty<t>(ref T field, T newValue, [CallerMemberName] string propertyName = null)
    {
        if (!Equals(field, newValue))
        {
            field = newValue;
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
            return true;
        }

        return false;
    }

    public string TextStatus { get => _textStatus; set => SetProperty(ref _textStatus, value); }

}

Y aquí está mi XAML:

<textblock x:name="StatusText" text="{Binding Path=TextStatus, UpdateSourceTrigger=PropertyChanged}" grid.row="3" grid.column="1" grid.columnspan="2" horizontalalignment="Center"></textblock>

No estoy seguro de por qué puede inicializarse pero no actualizarse.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema podría estar relacionado con el hecho de que la función WriteCommand no está lanzando el evento PropertyChanged después de actualizar la propiedad TextStatus.

    Para que la interfaz de usuario detecte los cambios en la propiedad vinculada, es necesario que se lance el evento PropertyChanged cada vez que se actualice el valor.

    Prueba añadiendo la siguiente línea al final de la función WriteCommand, después de actualizar la propiedad TextStatus:

    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(TextStatus)));
    

    Esto debería lanzar el evento PropertyChanged y notificar a la interfaz de usuario para que actualice el elemento TextBlock vinculado con el nuevo valor de TextStatus.

Comments are closed.