2009-03-05 79 views
0

我想要Databind到我的自定義字典類。在formLoad中,我可以綁定到Car.Desc,但我無法綁定到RatesCache.Desc。 它們都是公共字符串屬性。c#DataBinding通用的字符串屬性

我錯過了什麼?

謝謝!

System.ArgumentException了未處理 消息=「無法結合於數據源的屬性或列說明\ r \ n參數名稱:數據成員」 源=「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"); 
    } 

回答

1

我的猜測是,因爲你的類繼承自一個集合的Dictionary,它拋出了文本框的DataBinding。 Windows窗體有自己的方式處理數據綁定到不同的集合,直接綁定到類的屬性。我知道,答案並不多,但我不認爲真的有辦法解決這個問題。我的建議是要麼不直接從字典繼承;而是保留一個內部字典,並根據需要公開方法。或者,不要直接數據綁定texbox。相反,只要您的「Desc」屬性在您的RatesCache類中更改,然後在您的表單中偵聽該事件時引發一個事件。當它改變時,更新你的文本框。

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