Objective-c/cacao bietet eine Form der Bindung, bei der die Eigenschaften eines Steuerelements (dh Text in einem Textfeld) an die Eigenschaft eines Objekts gebunden werden können. Ich versuche, diese Funktionalität in C# w/.Net 3.5 zu duplizieren.Datenbindung an ein Objekt in C#
Ich habe die folgende sehr einfache Klasse in der Datei MyClass.cs erstellt:
class MyClass
{
private string myName;
public string MyName
{
get
{
return myName;
}
set
{
myName = value;
}
}
public MyClass()
{
myName = "Allen";
}
}
ich auch ein einfaches Formular mit 1 Textbox und 1-Taste erstellt. Ich habe eine Instanz von Myclass innerhalb des Formularcodes initiiert und das Projekt erstellt. Unter Verwendung des DataSource-Assistenten in Vs2008 habe ich ausgewählt, um eine Datenquelle basierend auf Objekt zu erstellen, und die MyClass-Assembly ausgewählt. Dies erstellt eine Datenquellenentität. Ich habe die Datenbindung der Textbox in diese Datenquelle geändert; Das erwartete Ergebnis (dass der Inhalt der Textbox "Allen" wäre) wurde jedoch nicht erreicht. Durch das Einfügen von Text in das Textfeld wird die Namenseigenschaft des Objekts nicht aktualisiert.
Ich weiß, dass ich etwas Grundlegendes hier vermisse. Irgendwann müsste ich meine Instanz der MyClass-Klasse, die ich im Formularcode initialisiert habe, an die Textbox binden, aber das ist nicht passiert. Alles, was ich online angeschaut habe, scheint mit DataBinding mit einem Objekt zu glänzen (oder ich vermisse die Marke komplett), so dass jede Hilfe sehr geschätzt wird.
Edit:
Verwendung, was ich mit den Antworten gelernt, ich auf den Code sah von Visual Studio generiert, hatte es die folgenden:
this.myClassBindingSource.DataSource = typeof(BindingTest.MyClass);
wenn ich das kommentieren und Ersatz:
this.myClassBindingSource.DataSource = new MyClass();
Ich bekomme das erwartete Verhalten. Warum wird der von VS generierte Standardcode so wie er ist? Angenommen, dies ist korrekter als die Methode, die funktioniert, wie soll ich meinen Code ändern, um innerhalb der Grenzen dessen zu arbeiten, was VS generiert hat?
public class MyClass : INotifyPropertyChanged
{
private string _myName;
public string MyName
{
get { return _myName; }
set
{
if(_myName != value)
{
_myName = value;
OnPropertyChanged("MyName");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if(PropertyChanged != null)
PropertyChanged(this , new PropertyChangedEventArgs(propertyName));
}
}
Diese Schnittstelle ist erforderlich für die Databinding-Infrastruktur, wenn Sie einfache Datenbindung unterstützen:
Der Standardcode wird auf diese Weise behandelt, damit zur Entwurfszeit alle Steuerelemente die verschiedenen Arten von Eigenschaften kennen, die für die Datenbindung zur Verfügung stehen. Zur Laufzeit benötigen Sie jedoch eine tatsächliche Instanz. Entfernen Sie nicht den automatisch generierten Code, sondern setzen Sie einen neuen Wert in Ihrem Formular onload oder soemthing –