【问题标题】:c# DataBinding to string property on a Genericc# DataBinding 到泛型上的字符串属性
【发布时间】:2009-03-05 18:38:36
【问题描述】:

我正在尝试将数据绑定到我的自定义字典类。在 formLoad 中,我可以绑定到 Car.Desc,但不能绑定到 RatesCache.Desc。 它们都是公共字符串属性。

我错过了什么?

谢谢!

System.ArgumentException 未处理 Message="无法绑定到 DataSource 上的属性或列 Desc。\r\n参数名称:dataMember" 源="系统.Windows.Forms" ParamName="dataMember"

    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");
    }

【问题讨论】:

    标签: c# data-binding properties generics


    【解决方案1】:
    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;
        }
    }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-10
        • 2019-03-10
        • 1970-01-01
        相关资源
        最近更新 更多