【问题标题】:Winforms .Net Simple Databinding Not WorkingWinforms .Net 简单数据绑定不起作用
【发布时间】:2009-03-03 20:45:45
【问题描述】:

我有一个 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);
        }
    }
}

【问题讨论】:

  • 是 VFPFileName 和 VFPConnectionString 属性,还是只是公共字段?
  • VFPFileName 和 VFPConnectionString 是公共字段。
  • 哎呀,BindingSource 行是我在玩的东西...不是问题的有效部分。已编辑。
  • 不,我没有实现 INotifyPropertyChanged。我会检查一下。
  • 您不需要为您的案例实现 WinForms 数据绑定的 INotifyPropertyChanged

标签: c# .net winforms data-binding


【解决方案1】:

EdsConfig 类是否实现INotifyPropertyChanged 接口?
这是用作数据绑定源的对象的要求,因为 PropertyChanged 事件是从属性的设置器用于在属性被修改时更新绑定。

【讨论】:

    【解决方案2】:

    将“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");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-21
      • 1970-01-01
      • 2023-04-03
      • 2018-02-03
      • 1970-01-01
      • 2015-11-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多