Winforms .Net Простая привязка данных не работает - PullRequest
2 голосов
/ 03 марта 2009

У меня есть Winform с очень простой предпосылкой: измените 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);
        }
    }
}

Ответы [ 2 ]

4 голосов
/ 03 марта 2009

Реализует ли класс EdsConfig интерфейс INotifyPropertyChanged ?
Это требование для объектов, которые используются в качестве источников привязки данных, поскольку PropertyChanged Событие, вызванное установщиками свойств, используется для обновления привязок при каждом изменении свойства.

0 голосов
/ 04 марта 2009

Установите аргумент DataSource в «DataBindings.Add (..)» на «bs» (типа BindingSource)

    BindingSource bs = new BindingSource(EdsConfig, "VFPConnectionString");
    this.VFPConnectionStringTextbox.DataBindings.Add("Text", bs, "VFPConnectionString");
    this.VFPFileNameTextbox.DataBindings.Add("Text", bs, "VFPFileName");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...