Frage

Ich versuche, meine Benutzerwörterbuch-Klasse DataBind. In Formload kann ich Car.Desc binden, aber ich kann nicht an RatesCache.Desc binden. Sie sind beide public string Eigenschaften.

Was bin ich?

Danke!

System.ArgumentException wurde nicht behandelt   Message = „nicht auf die Eigenschaft oder Spalte Desc auf der Datasource binden kann \ r \ nParameter Name:. 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");
    }
War es hilfreich?

Lösung

Meine Vermutung ist, dass, weil die Klasse von einem Wörterbuch erbt, die eine Collection, es das Databinding für die Textbox abwirft. Windows Forms hat seine eigene Art und Weise mit Datenbindung zu einer Sammlung von Behandlung verschiedener dann, wenn die Bindung direkt auf eine Eigenschaft einer Klasse. Nicht viel von einer Antwort, ich weiß, aber ich glaube nicht, dass es wirklich ein Weg drum herum. Mein Vorschlag wäre, entweder nicht direkt von Wörterbuch erben; halten eher ein internes Wörterbuch, und setzen Methoden je nach Bedarf. OR, Databind nicht die texbox direkt. Vielmehr hebt ein Ereignis, wenn Ihre „Desc“ Eigenschaftsänderungen in Ihrer RatesCache Klasse, und dann in dem Formular zu diesem Ereignisse hören. Wenn sie sich ändert, aktualisieren Sie Ihre Textbox.

Andere Tipps

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;
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top