2009-01-04 5 views
2

Je liant un domaine des objets propriété à la propriété d'un texte System.Windows.Forms.Label en utilisant la DataBindings:Comment actualiser une liaison simple d'un contrôle Windows Forms?

Label l = new Label(); 
l.DataBindings.Add(new Binding("Text",myDomainObject,"MyProperty")); 

Cependant, quand je change l'objet de domaine, l'étiquette ne reflète pas le changement . Je sais que pour les contrôles complexes comme DataGridView, la liaison peut être faite avec un BindingSource sur lequel je peux appeler ResetBindings, mais je n'ai trouvé aucune méthode pour mettre à jour la liaison dans le cas simple d'un Label.

Répondre

3

Votre objet de domaine doit implémenter INotifyPropertyChanged afin que la liaison sache quand la propriété sous-jacente a été modifiée.

7

Kent a la bonne réponse, mais je veux ajouter un peu de fioriture sur l'application INotifyPropertyChanged interface.

Pour déclencher l'événement facilement essayer ce

protected void OnPropertyChanged<T>(Expression<Func<T>> property) 
{ 
    if (this.PropertyChanged != null) 
    { 
     var mex = property.Body as MemberExpression; 
     string name = mex.Member.Name; 
     this.PropertyChanged(this, new PropertyChangedEventArgs(name)); 
    } 
} 

et l'appliquer comme

{ // inside some method or property setter 
    OnPropertyChanged(() => this.MyProperty); 
} 

La seule raison pour laquelle cela vaut mieux que de spécifier la propriété par son nom, est que si vous refactoring, ou tout simplement changez le nom de la propriété, vous n'aurez pas à modifier manuellement l'implentation, mais vous pourrez laisser le compilateur renommer automatiquement toutes les références.

Questions connexes