private BindingList<MyClass> myClasses = new BindingList<MyClass>(); public Form1()
{
MyClass myclass = new MyClass(2, "dick", "jones");
ListBox li = new ListBox();
BindingSource bs = new BindingSource();
Button btn = new Button();
myClasses.Add(myclass);
bs.DataSource = myClasses;
li.DataSource = bs;
li.Dock = DockStyle.Fill;
this.Controls.Add(li);
btn.Text = "change dick to richard";
btn.Click += delegate
{
myclass.Forename = "richard";
Debug.WriteLine("Changed, but do I reflect change in listbox?");
};
btn.Dock = DockStyle.Top;
this.Controls.Add(btn);
}
}
public class MyClass : INotifyPropertyChanged
{
private int id;
private string forename;
private string surname;
public MyClass(int id, string forename, string surname)
{
this.id = id;
this.forename = forename;
this.surname = surname;
}
public int ID
{
get { return id; }
set { id = value; }
}
public string Forename
{
get { return forename; }
set
{
if (forename != value)
{
forename = value;
OnPropertyChanged("Forename");
}
}
}
public string Surname
{
get { return surname; }
set { surname = value; }
}
public override string ToString()
{
return surname + ", " + forename;
}
#region INotifyPropertyChanged Members
protected virtual void OnPropertyChanged(string propertyName)
{
OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
}
protected virtual void OnPropertyChanged(PropertyChangedEventArgs args)
{
if (null != this.PropertyChanged)
{
this.PropertyChanged(this, args);
}
}
public event PropertyChangedEventHandler PropertyChanged;
#endregion
}