Lista de unión a DataGridView en WinForm

Tengo una clase

class Person{ public string Name {get; set;} public string Surname {get; set;} } 

y una List a la que agrego algunos elementos. La lista está vinculada a mi DataGridView .

 List persons = new List(); persons.Add(new Person(){Name="Joe", Surname="Black"}); persons.Add(new Person(){Name="Misha", Surname="Kozlov"}); myGrid.DataSource = persons; 

No hay ningún problema. myGrid muestra dos filas, pero cuando agrego nuevos elementos a mi lista de persons , myGrid no muestra una nueva lista actualizada. Solo muestra las dos filas que agregué antes.

Entonces, ¿cuál es el problema?

Reenlazar cada vez funciona bien. Pero cuando enlace un DataTable a la grilla cuando cada vez que realizo algunos cambios en DataTable no es necesario ReBind myGrid .

¿Cómo resolverlo sin volver a vincular cada vez?

List no implementa IBindingList para que la grilla no conozca sus nuevos elementos.

Enlace su DataGridView a una BindingList lugar.

 var list = new BindingList(persons); myGrid.DataSource = list; 

Pero incluso iría más allá y vincularía su red a un BindingSource

 var list = new List() { new Person { Name = "Joe", }, new Person { Name = "Misha", }, }; var bindingList = new BindingList(list); var source = new BindingSource(bindingList, null); grid.DataSource = source; 

Cada vez que agrega un nuevo elemento a la Lista, necesita volver a enlazar su Cuadrícula. Algo como:

 List persons = new List(); persons.Add(new Person() { Name = "Joe", Surname = "Black" }); persons.Add(new Person() { Name = "Misha", Surname = "Kozlov" }); dataGridView1.DataSource = persons; // added a new item persons.Add(new Person() { Name = "John", Surname = "Doe" }); // bind to the updated source dataGridView1.DataSource = persons; 

Después de agregar un nuevo elemento a las persons agregue:

 myGrid.DataSource = null; myGrid.DataSource = persons; 

Sí, es posible hacerlo sin volver a vincular mediante la implementación de INotifyPropertyChanged Interface.

El ejemplo bastante simple está disponible aquí,

http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx