Как обновить простую привязку элемента управления Windows Forms?

StackOverflow https://stackoverflow.com/questions/411457

  •  03-07-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

Другие советы

Кент имеет правильный ответ, но я хочу добавить небольшую подсказку о применении интерфейса 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);
}

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top