How can I prevent infinite recursion when using events to bind UI elements to fields?
Posted
by Billy ONeal
on Stack Overflow
See other posts from Stack Overflow
or by Billy ONeal
Published on 2010-04-22T15:52:41Z
Indexed on
2010/04/22
21:13 UTC
Read the original article
Hit count: 183
The following seems to be a relatively common pattern (to me, not to the community at large) to bind a string variable to the contents of a TextBox.
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;
}
}
The problem is that changing the TextBox fires the changes the data value in the backend, which causes the textbox to change, etc. That runs forever.
Is there a better design pattern (other than resorting to a nasty boolean flag) that handles this case correctly?
EDIT: To be clear, in the real design the backend class is used to synchronize changes between multiple forms. Therefore I can't just use the SomeTextBox.Text property directly.
Billy3
© Stack Overflow or respective owner