Como atualizar uma ligação simples de um controle do Windows Forms?
Pergunta
Estou vinculando uma propriedade de objetos de domínio à propriedade de texto de um sistema.windows.forms.label usando o DataBindings
:
Label l = new Label();
l.DataBindings.Add(new Binding("Text",myDomainObject,"MyProperty"));
No entanto, quando altero o objeto de domínio, o rótulo não reflete a alteração. Sei que, para controles complexos, como o DataGridView, a ligação pode ser feita com uma fonte de Bindings na qual posso chamar de redefinição, mas não consegui encontrar nenhum método para atualizar a ligação no caso simples de um rótulo.
Solução
Seu objeto de domínio deve implementar InotifyPropertyChanged para que a ligação saiba quando a propriedade subjacente mudou.
Outras dicas
Kent tem a resposta correta, mas quero adicionar um pouco de petisco na aplicação INotifyPropertyChanged
interface.
Para aumentar o evento, tente facilmente isto
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));
}
}
e aplique -o como
{ // inside some method or property setter
OnPropertyChanged(() => this.MyProperty);
}
A única razão pela qual isso é melhor do que especificar a propriedade por nome, é que, se você refatorar ou apenas alterar o nome da propriedade, não precisará alterar manualmente a implicação, mas pode permitir que o compilador renomeie todas as referências automaticamente.