Pergunta

Eu tenho a seguinte aula

public class Car
{
   public Name {get; set;}
}

E eu quero ligar isso programaticamente a uma caixa de texto.

Como faço isso?

Atirando no escuro:

...
Car car = new Car();
TextEdit editBox = new TextEdit();
editBox.DataBinding.Add("Name", car, "Car - Name");
...

Estou tendo o erro a seguir

"Não é possível vincular ao 'nome' da propriedade no controle de destino.

O que estou fazendo de errado e como devo fazer isso? Estou achando o conceito de banco de dados um pouco difícil de entender vindo do desenvolvimento da Web.

Foi útil?

Solução

Você quer

editBox.DataBindings.Add("Text", car, "Name");

O primeiro parâmetro é o nome da propriedade no controle que você deseja ser banco de dados, o segundo é a fonte de dados, o terceiro parâmetro é a propriedade na fonte de dados a que você deseja vincular.

Outras dicas

Sem olhar para a sintaxe, tenho certeza de que é:

editBox.DataBinding.Add("Text", car, "Name");
editBox.DataBinding.Add("Text", car, "Name");

Primeiro Arg é o nome da propriedade Control, o segundo é o objeto a vincular e o último, o nome da propriedade do objeto que você deseja usar como fonte de dados.

Você está próximo, a linha de ligação de dados seria

editBox.DataBinding.Add("Text", car, "Name");

Este primeiro parâmetro é a propriedade do seu objeto EditBox que será vinculado a dados. O segundo parâmetro é a fonte de dados a que você está vinculando e o último parâmetro é a propriedade na fonte de dados a que você deseja vincular.

Lembre -se de que a ligação dos dados é uma maneira; portanto, se você alterar a caixa de edição, o objeto do carro será atualizado, mas se você alterar o nome do carro diretamente, a caixa de edição não será atualizada.

Tentar:

editBox.DataBinding.Add( "Text", car", "Name" );

Acredito que

editbox.databindings.add (New Binding ("Text", Car, "Name"));

deve fazer o truque. Não experimentei, mas acho que essa é a ideia.

Você está tentando vincular ao "nome" do controle de texto. O nome é usado para acessar o controle programaticamente e não pode ser vinculado. Você deve estar vinculado ao texto do controle.

A seguir, é a classe genérica que pode ser usada como propriedade e implementa o inotifyPropertyChanged usado pelos controles ligados para capturar alterações no valor da propriedade.

public class NotifyValue<datatype> : INotifyPropertyChanged 
{
    public event PropertyChangedEventHandler PropertyChanged = delegate { };

    datatype _value;
    public datatype Value
    {
        get
        {
            return _value;
        }
        set
        {
            _value = value;
            PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Value"));
        }
    }

}

Pode ser declarado assim:

public NotifyValue<int> myInteger = new NotifyValue<int>();

e atribuído a uma caixa de texto como esta

Textbox1.DataBindings.Add(
    "Text", 
    this, 
    "myInteger.Value", 
    false, 
    DataSourceUpdateMode.OnPropertyChanged
);

.. Onde "texto" é de propriedade da caixa de texto, 'isso' é a instância atual do formulário.

Uma classe não precisa herdar a classe InotifyPropertyChanged. Depois de declarar um evento do tipo system.componentmodel.propertyChangedEventHandler O evento de mudança de classe será subscrito pelo banco de dados de controles

Usando a sintaxe C# 4.6:

editBox.DataBinding.Add(nameof(editBox.Text), car, nameof(car.Name));

Se o carro for nulo, o código acima falhará de uma maneira mais conspícua do que usar a sequência literal para representar o datamember do car

Está

 this.editBox.DataBindings.Add(new Binding("Text", car, "Name"));
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top