2009-03-05 6 views
0

私はカスタム辞書クラスにデータバインドしようとしています。 formLoadでは、Car.Descにバインドできますが、RatesCache.Descにバインドできません。 これらは共にパブリックの文字列プロパティです。c#一般的な文字列プロパティへのデータバインド

私には何が欠けていますか?

ありがとうございます!

System.ArgumentExceptionのは、未処理の メッセージ= "データソースのプロパティまたは列DESCにバインドすることはできません\ rを\ nParameter名:データメンバー" だった ソース= "の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フォームでは、クラスのプロパティに直接バインドするときとは異なるコレクションへのデータバインディングを処理する独自の方法があります。あまり答えは分かりませんが、私は本当にその周りに道があるとは思わないのです。私の提案は、辞書から直接継承しないか、代わりに内部ディクショナリを保持し、必要に応じてメソッドを公開します。または、テクスチャボックスを直接データバインドしないでください。むしろ、あなたの "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; 
    } 
} 
関連する問題