Question

Je lie une propriété d'objets de domaine à la propriété Text d'un System.Windows.Forms.Label à l'aide de DataBindings :

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

Cependant, lorsque je change d'objet de domaine, le libellé ne reflète pas le changement. Je sais que pour des contrôles complexes tels que 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’une Label.

Était-ce utile?

La solution

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

Autres conseils

Kent a la bonne réponse, mais je souhaite ajouter un petit détail sur l’application de l’interface INotifyPropertyChanged .

Pour relever facilement l'événement, essayez ceci

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 appliquez-le 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, c’est que si vous refactorisez ou modifiez simplement le nom de la propriété, vous ne devrez pas modifier manuellement l’implémentation, mais pourrez laisser le compilateur renommer toutes les références. automatiquement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top