Domanda

Ho la seguente classe

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

e voglio associarlo a livello di codice a una casella di testo.

Come posso farlo?

Scatto al buio:

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

Ricevo il seguente errore

  

" Impossibile eseguire il bind al "Nome" sul controllo target.

Cosa sto facendo di sbagliato e come dovrei farlo? Sto trovando il concetto di creazione di database un po 'difficile da capire derivante dallo sviluppo web.

È stato utile?

Soluzione

Tu vuoi

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

Il primo parametro è il nome della proprietà sul controllo a cui si desidera essere databound, il secondo è l'origine dati, il terzo parametro è la proprietà sull'origine dati a cui si desidera associare.

Altri suggerimenti

Senza guardare la sintassi, sono abbastanza sicuro che sia:

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

Il primo argomento è il nome della proprietà di controllo, il secondo è l'oggetto da associare e l'ultimo, il nome della proprietà dell'oggetto che si desidera utilizzare come origine dati.

Sei abbastanza vicino alla linea di associazione dei dati

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

Questo primo parametro è la proprietà dell'oggetto editbox che sarà associato ai dati. Il secondo parametro è l'origine dati a cui si esegue il binding e l'ultimo parametro è la proprietà sull'origine dati a cui si desidera associare.

Tieni presente che l'associazione dei dati è un modo, quindi se cambi la casella di modifica, l'oggetto auto viene aggiornato, ma se cambi direttamente il nome dell'auto la casella di modifica non viene aggiornata.

Prova:

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

Lo credo

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

dovrebbe fare il trucco. Non l'ho provato, ma penso che sia l'idea.

Stai tentando di associare il " Nome " del controllo TextEdit. Il nome viene utilizzato per accedere al controllo a livello di codice e non può essere associato. Dovresti essere vincolante nei confronti del testo del controllo.

Di seguito è riportata una classe generica che può essere utilizzata come proprietà e implementa INotifyPropertyChanged utilizzato dai controlli associati per acquisire le modifiche nel valore della proprietà.

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"));
        }
    }

}

Può essere dichiarato così:

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

e assegnato a una casella di testo come questa

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

..where " Testo " è la proprietà della casella di testo, "this" è l'istanza del modulo corrente.

Una classe non deve ereditare la classe INotifyPropertyChanged. Dopo aver dichiarato un evento di tipo System.ComponentModel.PropertyChangedEventHandler, l'evento di cambio di classe verrà sottoscritto dal database dei controlli

Utilizzo della sintassi di C # 4.6:

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

se l'automobile è nulla, il codice sopra riportato non funzionerà in modo più evidente rispetto all'uso della stringa letterale per rappresentare il datamember di car

è

 this.editBox.DataBindings.Add(new Binding("Text", car, "Name"));
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top