我有一个具有非常基本前提的Winform:修改传递给它的对象的2个字符串属性,然后在表单关闭时将其保存到磁盘。我试图使用数据绑定将表单上2个文本框的Text属性绑定到对象的2个字符串属性。
但它不起作用。文本框永远不会显示我在构造函数中指定给对象属性的值。当我在文本框中键入内容时,对象属性不会更新。我做错了什么?
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 :(得分:4)
EdsConfig 类是否实现了INotifyPropertyChanged接口?
这是对用作数据绑定源的对象的要求,因为 PropertyChanged 从属性的setter引发的事件用于在修改属性时更新绑定。
答案 1 :(得分:0)
将“DataBindings.Add(..)”中的DataSource参数设置为“bs”(BindingSource类型)
BindingSource bs = new BindingSource(EdsConfig, "VFPConnectionString");
this.VFPConnectionStringTextbox.DataBindings.Add("Text", bs, "VFPConnectionString");
this.VFPFileNameTextbox.DataBindings.Add("Text", bs, "VFPFileName");