2009-03-03 7 views
1

J'ai un Winform avec une prémisse très basique: modifiez 2 propriétés de chaîne d'un objet qui y est passé, puis enregistrez-le sur le disque lorsque le formulaire se ferme. J'essaie d'utiliser la liaison de données pour lier les propriétés Text de 2 zones de texte sur le formulaire aux 2 propriétés de chaîne de l'objet.WinDiffusions .Net Simple Databinding ne fonctionne pas

Mais cela ne fonctionne pas. Les zones de texte n'affichent jamais les valeurs que j'affecte aux propriétés de l'objet dans le constructeur. Et quand je tape quelque chose dans les zones de texte, les propriétés de l'objet ne sont pas mises à jour. Qu'est-ce que je fais mal?

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 et VFPConnectionString sont des champs publics. –

+0

Oups, la ligne BindingSource était quelque chose que je jouais avec ... pas une partie valide du problème. Edité –

+0

Non, je n'implémente pas INotifyPropertyChanged. Je vais vérifier cela. –

Répondre

3

Est-ce que la classe EdsConfig implémenter l'interface INotifyPropertyChanged?
Ceci est une condition requise pour les objets utilisés comme sources de liaison de données, car l'événement PropertyChanged déclenché à partir des paramètres de la propriété est utilisé pour mettre à jour les liaisons chaque fois que la propriété est modifiée.

0

Définissez l'argument DataSource dans "DataBindings.Add (..)" à "large" (de type BindingSource)

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