Lo siguiente parece ser un patrón relativamente común (para mí, no para la comunidad en general) para vincular una variable de cadena al contenido de un TextBox.¿Cómo puedo evitar la recursión infinita cuando uso eventos para vincular elementos de IU con campos?
class MyBackEndClass
{
public event EventHandler DataChanged;
string _Data;
public string Data
{
get { return _Data; }
set
{
_Data = value;
//Fire the DataChanged event
}
}
}
class SomeForm : // Form stuff
{
MyBackEndClass mbe;
TextBox someTextBox;
SomeForm()
{
someTextBox.TextChanged += HandleTextBox();
mbe.DataChanged += HandleData();
}
void HandleTextBox(Object sender, EventArgs e)
{
mbe.Data = ((TextBox)sender).Text;
}
void HandleData(Object sender, EventArgs e)
{
someTextBox.Text = ((MyBackEndClass) sender).Data;
}
}
El problema es que al cambiar el cuadro de texto dispara los cambios del valor de los datos en el back-end, lo que hace que el cuadro de texto para cambiar, etc, que se ejecuta siempre.
¿Hay un mejor patrón de diseño (que no sea recurriendo a una desagradable bandera booleana) que maneja este estuche correctamente?
EDITAR: Para ser claros, en el diseño real, la clase backend se utiliza para sincronizar los cambios entre varias formas. Por lo tanto, no puedo usar la propiedad SomeTextBox.Text directamente.
Billy3
Estoy confundido. Establecer TextBox.Text con el mismo valor dos veces seguidas solo provoca ** un ** evento ** TextChanged para disparar? – ParmesanCodice
@ParmesanCodice: No. Cada vez que alguien cambia el contenido del cuadro de texto, incluso si el contenido de la cadena que se mantiene allí no cambia, se desencadena el evento TextChanged. –
extraño. Estoy ejecutando tu programa en este momento, sin ver ese comportamiento. – ParmesanCodice