Frage

Ich habe die folgende Klasse

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

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

Wie kann ich das tun?

Schießen im Dunkeln:

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

Ich erhalte die folgende Fehlermeldung

  

"binden kann nicht an den propery 'Name' auf der Zielsteuerung.

Was mache ich falsch und wie soll ich das tun? Ich finde das Konzept Datenbindung ein bisschen schwierig, von Web-Entwicklung kommt zu erreichen.

War es hilfreich?

Lösung

Sie möchten

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

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

Andere Tipps

Ohne an der Syntax zu suchen, ich bin mir ziemlich sicher, dass es:

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

Zuerst 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.

Sie sind ganz in der Nähe der Datenbindungen Linie sein würde

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

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

Beachten Sie, dass die Bindungsdaten ein Weg ist, also, wenn Sie das Bearbeitungsfeld ändern dann das Auto-Objekt aktualisiert wird, aber wenn Sie das Auto Namen Feld direkt die Bearbeitung ändern wird nicht aktualisiert.

Versuchen:

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

Ich glaube, dass

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

sollte es tun. Hat es nicht ausprobieren, aber ich denke, das ist die Idee.

Sie versuchen, auf den „Namen“ der TextEdit Kontrolle zu binden. Der Name wird für den Zugriff auf das Steuerelement programmgesteuert verwendet und kann nicht gegen gebunden sein. Sie sollten gegen den Text der Steuer verbindlich.

Hier finden Sie generische Klasse, die als Eigenschaft verwendet werden kann und implementiert INotifyPropertyChanged durch gebundene Steuerelemente verwendet zu erfassen Änderungen in dem Eigenschaftswert.

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 auf eine Textbox wie folgt zugewiesen

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

.. wo "Text" ist die Eigenschaft der Textbox, 'dies' ist aktuelle Form Instanz.

Eine Klasse muss nicht die INotifyPropertyChanged-Klasse erben. Sobald Sie ein Ereignis vom Typ deklarieren System.ComponentModel.PropertyChangedEventHandler die Klasse Änderungsereignis wird Databinder

von den Kontrollen abonniert werden

Mit C # 4.6 Syntax:

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

Wenn Auto null ist, dann wird der obige Code wird in einer auffälligen Weise nicht als Zeichenkette mit der datamember von car darzustellen

es

 this.editBox.DataBindings.Add(new Binding("Text", car, "Name"));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top