質問

カスタム辞書クラスにデータバインドしようとしています。 formLoadでは、Car.Descにバインドできますが、RatesCache.Descにバインドできません。 どちらもパブリック文字列プロパティです。

不足しているものは何ですか?

ありがとう!

System.ArgumentExceptionが処理されませんでした   Message =" DataSourceのプロパティまたは列Descにバインドできません。\ r \ nパラメーター名:dataMember"   Source =" System.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");
    }
役に立ちましたか?

解決

私の推測では、クラスはコレクションであるディクショナリから継承しているため、テキストボックスのDataBindingがスローされます。 Windowsフォームには、クラスのプロパティに直接バインドする場合とは異なるコレクションへのデータバインドを処理する独自の方法があります。あまり答えはありませんが、私は知っていますが、実際に解決策があるとは思いません。私の提案は、辞書から直接継承しないことです。むしろ内部辞書を保持し、必要に応じてメソッドを公開します。または、texboxを直接データバインドしないでください。むしろ、「Desc」が発生するたびにイベントを発生させます。 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