Как обновить простую привязку элемента управления Windows Forms?
Вопрос
Я связываю свойство объектов домена со свойством 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);
}
Единственная причина, по которой это лучше, чем указание свойства по имени, заключается в том, что если вы выполните рефакторинг или просто измените имя свойства, вам не нужно будет вручную изменять вложение, но вы можете позволить компилятору переименовать все ссылки автоматически.