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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top