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.

Cascada de propiedad modificada

Tengo un formulario con una vinculación en él:

<textbox x:name="txtGroupName" height="23" margin="96,13,10,0" verticalalignment="Top" tabindex="0" text="{Binding UserLevel.Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" textwrapping="Wrap"></textbox>

Utilizando MVVM, hay una vista a la que está vinculada, que contiene lo siguiente:

public UserLevel UserLevel
{
    get { return _userLevel; }
    set { _userLevel = value; OnPropertyChanged("UserLevel"); OnPropertyChanged("SaveButtonEnabled"); }
}

public bool SaveButtonEnabled
{
    get { return UserLevel.IsValid(); }
}

Sin embargo, cuando se actualiza el valor del cuadro de texto, aunque está vinculado a UserLevel.Name, la propiedad UserLevel en la vista nunca se establece. El valor de texto se establece (es decir, Name), pero aunque la vista y la clase detrás de ella tienen OnPropertyChanged, la ejecución de SaveButtonEnabled nunca se realiza. Sé que probablemente podría poner una propiedad en la vista llamada Name que luego actualiza UserLevel, pero hacer esto parece poco intuitivo, seguramente hay una mejor manera.

Parece que quiero propagar el evento PropertyChanged.

Gracias de antemano.

James

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que puede haber un problema con el enlace que no actualiza correctamente la propiedad UserLevel cuando se cambia el valor del cuadro de texto. Una posible solución sería agregar un evento PropertyChanged para la propiedad Name en la clase UserLevel, y hacer que actualice la propiedad SaveButtonEnabled cuando la propiedad Name cambie. De esta manera, cuando se actualice el valor del cuadro de texto y cambie la propiedad Name, también se propagará el evento PropertyChanged para actualizar la propiedad SaveButtonEnabled.

    Otra solución podría ser implementar la interfaz ICommand en el ViewModel y vincularla al botón Guardar. De esta manera, cuando se presione el botón, se llamará al método Execute que puede actualizar el objeto UserLevel y cualquier propiedad relacionada, como SaveButtonEnabled. Esto desacoplaría la funcionalidad del botón Guardar del objeto UserLevel y permitiría una mayor flexibilidad en su implementación.

Comments are closed.