Your custom object that you're showing has to be able to notify that it's values are changing (ie implements INotifyPropertyChanged).
Then, you can change your PanelPreview to bind on your object.
This way, you can have as much instances as you like - when you change in one instance, the INotifyPropertyChanged will trigger the displaying on all others.
For example:
public class CustomClass : INotifyPropertyChanged
{
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
#endregion
private void OnPropertyChanged(string propName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propName));
}
}
private string mProp;
public string Prop
{
get
{
return mProp;
}
set
{
if (value != mProp)
{
mProp = value;
OnPropertyChanged("Prop");
}
}
}
}
And then in your binding place you bind to it. Here I'm binding to textboxes, but you could do it with whatever:
CustomClass c = new CustomClass();
textBox1.DataBindings.Add("Text", c, "Prop", true, DataSourceUpdateMode.OnPropertyChanged);
textBox2.DataBindings.Add("Text", c, "Prop", true, DataSourceUpdateMode.OnPropertyChanged);