2008-09-22 6 views
34

Ich habe die folgende KlasseWie kann ich Datenbindung in C# tun?

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

und ich möchte dies zu einem Textfeld programmatisch binden.

Wie mache ich das?

Schießen im Dunkeln:

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

ich die folgende Fehlermeldung erhalten

„Kann nicht an den propery 'Name' auf dem Zielsteuer binden

Was bin ich. falsch machen und wie sollte ich das tun? Ich finde das Datinding-Konzept ein wenig schwierig zu verstehen, kommt von Web-Entwicklung.

Antwort

49

Sie

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

Der erste Parameter ist der Name der Eigenschaft auf dem Steuerelement, das Sie werden datengebundene wollen, die zweite ist die Datenquelle ist, ist der dritte Parameter die Eigenschaft auf die Datenquelle, die an die Sie binden möchten.

11

Ohne die Syntax zu suchen, ich bin ziemlich sicher, dass es:

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

Sie versuchen, der TextEdit Kontrolle an den „Name“ zu binden. Der Name wird für den programmgesteuerten Zugriff auf das Steuerelement verwendet und kann nicht gebunden werden. Sie sollten den Text des Steuerelements binden.

3

Versuchen:

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

Ich glaube, dass

editBox.DataBindings.Add (neue Bindung ("Text", Auto, "Name"));

sollte den Trick tun. Habe es nicht ausprobiert, aber ich denke, das ist die Idee.

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

Erste arg der Name der Steuerelementeigenschaft ist, ist die zweite Aufgabe zu binden, und die letzte, der Name der Objekteigenschaft Sie als Datenquelle verwendet werden sollen.

6

Sie sind ganz in der Nähe der Datenbindungen Linie

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

Dieser erste Parameter die Eigenschaft Ihres editbox Objekt ist, das Daten gebunden werden. Der zweite Parameter ist die Datenquelle, an die Sie binden, und der letzte Parameter ist die Eigenschaft der Datenquelle, an die Sie binden möchten.

Bedenken Sie, dass die Datenbindung in einer Richtung ist. Wenn Sie also das Bearbeitungsfeld ändern, wird das Fahrzeugobjekt aktualisiert, aber wenn Sie den Fahrzeugnamen direkt ändern, wird das Bearbeitungsfeld nicht aktualisiert.

0

Die folgende generische Klasse kann als Eigenschaft verwendet werden und implementiert INotifyPropertyChanged, das von gebundenen Steuerelementen verwendet wird, um Änderungen im Eigenschaftswert zu erfassen.

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

} 

Es kann wie folgt erklärt werden:

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

und wie diese die Eigenschaft der Textbox ist

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

..wo "Text" zu einem Textfeld zugeordnet ist, ‚diese 'ist aktuelle Formularinstanz.

Eine Klasse muss die INotifyPropertyChanged-Klasse nicht erben. Sobald Sie ein Ereignis vom Typ deklarieren System.ComponentModel.PropertyChangedEventHandler der Klassenänderungsereignis wird von der Steuerung abonniert werden Databinder

0

C# 4.6 Verwenden von Syntax:

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

wenn Auto null ist, dann wird der obige Code wird nicht in einem auffälligen Weise als Zeichenkette mit dem datamember von car

0

es

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