2009-03-03 15 views
1

Ich habe eine Winform mit einer sehr grundlegenden Prämisse: Ändern Sie 2 String-Eigenschaften eines Objekts, das in es übergeben wird, dann speichern Sie es auf der Festplatte, wenn das Formular geschlossen wird. Ich versuche, Datenbindung zu verwenden, um die Texteigenschaften von 2 Textfeldern in dem Formular an die 2 Zeichenfolgeneigenschaften des Objekts zu binden.Winforms .Net Einfache Datenbindung funktioniert nicht

Aber es funktioniert nicht. Die Textfelder zeigen niemals die Werte an, die ich den Objekteigenschaften im Konstruktor zuweise. Und wenn ich etwas in die Textfelder eintippe, werden die Objekteigenschaften nicht aktualisiert. Was mache ich falsch?

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.IO; 
using System.Xml; 
using System.Xml.Serialization; 
namespace Eds_Viewer 
{ 
    public partial class EdsConfigForm : Form 
    { 
     public EdsConfigForm(EdsConfig myconfig) 
     { 
      InitializeComponent(); 
      EdsConfig = myconfig; 
      if (EdsConfig.VFPConnectionString == null) //set a default value 
      { 
       EdsConfig.VFPConnectionString = "Provider=vfpoledb;Data Source=g:\\eds\\"; 
      } 
      if (EdsConfig.VFPFileName == null) //set a default value 
      { 
       EdsConfig.VFPFileName = "InvoiceDB"; 
      } 
      this.VFPConnectionStringTextbox.DataBindings.Add("Text", EdsConfig, "VFPConnectionString"); 
      this.VFPFileNameTextbox.DataBindings.Add("Text", EdsConfig, "VFPFileName"); 
     } 
     EdsConfig EdsConfig; 
     private void SaveConfigToDisk(EdsConfig myconfig) 
     { 
      XmlSerializer x = new XmlSerializer(typeof(EdsConfig)); 
      TextWriter tw = new StreamWriter("EdsConfig.xml"); 
      x.Serialize(tw, myconfig); 
      tw.Close(); 
     } 
     private void EdsConfigForm_FormClosing(object sender, FormClosingEventArgs e) 
     { 
      this.SaveConfigToDisk(this.EdsConfig); 
     } 
    } 
} 
+0

VFPFileName und VFPConnectionString sind öffentliche Felder. –

+0

Whoops, die BindingSource-Zeile war etwas, mit dem ich spielte ... kein gültiger Teil des Problems. Herausgegeben. –

+0

Nein, ich implementiere INotifyPropertyChanged nicht. Ich werde das überprüfen. –

Antwort

3

Hat die EdsConfig Klasse den INotifyPropertyChanged Schnittstelle implementieren?
Dies ist eine Voraussetzung für Objekte, die als Datenbindungsquellen verwendet werden, da das PropertyChanged-Ereignis, das von den Setter der Eigenschaften ausgelöst wird, zum Aktualisieren der Bindungen verwendet wird, wenn die Eigenschaft geändert wird.

0

das Datasource-Arguments in Set "DataBindings.Add (..)" auf "bs" (vom Typ Binding)

BindingSource bs = new BindingSource(EdsConfig, "VFPConnectionString"); 
    this.VFPConnectionStringTextbox.DataBindings.Add("Text", bs, "VFPConnectionString"); 
    this.VFPFileNameTextbox.DataBindings.Add("Text", bs, "VFPFileName"); 
Verwandte Themen