c#DataBinding到Generic上的字符串属性

时间:2009-03-05 18:38:37

标签: c# data-binding properties generics

我正在尝试将Databind添加到我的自定义词典类中。在formLoad中,我可以绑定到Car.Desc,但我无法绑定到RatesCache.Desc。 它们都是公共字符串属性。

我错过了什么?

谢谢!

System.ArgumentException未处理   Message =“无法绑定到DataSource上的属性或列Desc。\ r \ nParameter name:dataMember”   来源= “System.Windows.Forms的”   PARAMNAME = “数据成员”

    public class RatesCache : Dictionary<int, Rate>
    {
        public string Desc { get; set; }
    }

    public class Car
    {
        public string Desc { get; set; }
    }

    static Car car = new Car();

    static RatesCache rc = new RatesCache();

    private void Form1_Load(object sender, EventArgs e)
    {
        rc.Desc = "hello too";
        car.Desc = "Im a car";
        textBox1.DataBindings.Add("Text", rc, "Desc");
    }

2 个答案:

答案 0 :(得分:2)

private void Form1_Load(object sender, EventArgs e)
{
    rc.Desc = "hello too";
    car.Desc = "Im a car";
    textBox1.DataBindings.Add("Text", rc, "Desc");
    textBox1.TextChanged .TextChanged += _textBox1_TextChanged;
}

private void _messagesReceviedLabel_TextChanged(object sender, EventArgs e)
{
    _textBox1.Text = rc.Desc.ToString();
}

public class RatesCache : Dictionary<int, Rate>
{
    public string Desc { get; set; }

    public override string ToString()
    {
        return Desc;
    }
}

答案 1 :(得分:1)

我的猜测是,因为你的类继承自Collection的一个Dictionary,它会抛出文本框的DataBinding。 Windows Forms有自己的方式处理数据绑定到不同的集合,然后直接绑定到类的属性。我知道,答案不是很多,但我认为没有办法解决问题。我的建议是要么不直接从Dictionary继承;而是保留一个内部字典,并根据需要公开方法。或者,不要直接对texbox进行数据绑定。相反,只要在您的RatesCache类中更改“Desc”属性,然后在表单中听取该事件,就会引发一个事件。如果更改,请更新文本框。