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

我错过了什么?

谢谢!

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

    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");
    }
有帮助吗?

解决方案

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

其他提示

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;
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top