Oggi, cercando di capire perchè un operazione banale come il binding di una proprietà non funzionava, mi sono accorto di un dettaglio non proprio marginale: Il motore di Binding funziona solo se le proprietà sono publiche indipendentemente dal contesto di visibilità delle stesse.

Prendete questa classe:

 public class Person
 {
  private string  mName;
  public Person (){this.Name = "Test";}

  public string  Name
  {
   get { return mName; }
   internal set { mName = value; }
  }
 }

Mettete in binding la proprietà Name verso una TextBox usando:
textBox1.DataBindings.Add("Text", new Person(), "Name");
e noterete che la proprietà non viene mai valorizzata quando il contenuto della textbox cambia, questo perchè il motore di binding internamente si appoggia su un CustomTypeDescriptor che filtra le proprietà non publiche.
A questo punto mi domando: Ma è corretta questa implementazione?

Update: In effetti, essendo il binding gestito all'interno dell'assembly System.Windows.Forms, il fatto di non poter accedere alla proprieta' internal e' corretto, rimane il fatto che questo limita gli scenari di applicazione del databinding.