Как обновить простую привязку элемента управления Windows Forms? - PullRequest
2 голосов
/ 04 января 2009

Я связываю свойство объектов домена со свойством Text System.Windows.Forms.Label, используя DataBindings:

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

Однако, когда я изменяю объект домена, метка не отражает это изменение. Я знаю, что для сложных элементов управления, таких как DataGridView, привязка может быть выполнена с BindingSource, для которого я могу вызвать ResetBindings, но я не смог найти какой-либо метод для обновления привязки в простом случае Label.

Ответы [ 2 ]

7 голосов
/ 23 февраля 2011

У Кента правильный ответ, но я хочу добавить небольшую новость о применении интерфейса INotifyPropertyChanged.

Чтобы поднять событие легко попробуйте это

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));
    }
}

и примените его как

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

Единственная причина, по которой это лучше, чем указание свойства по имени, заключается в том, что если вы выполните рефакторинг или просто измените имя свойства, вам не нужно будет вручную изменять вложение, но вы можете позволить компилятору переименовать все ссылки. автоматически.

3 голосов
/ 04 января 2009

Ваш объект домена должен реализовывать INotifyPropertyChanged , чтобы привязка знала, когда базовое свойство изменилось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...