c # DataBinding к строковому свойству в общем - PullRequest
0 голосов
/ 05 марта 2009

Я пытаюсь привязать данные к своему пользовательскому словарному классу. В formLoad я могу привязать к Car.Desc, но не могу привязать к RatesCache.Desc. Они оба являются открытыми строковыми свойствами.

Чего мне не хватает?

Спасибо!

System.ArgumentException не обработан Сообщение = "Невозможно связать свойство или столбец Desc в источнике данных. \ R \ nИмя параметра: dataMember" Источник = "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");
    }

Ответы [ 2 ]

2 голосов
/ 22 марта 2011
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;
    }
}
1 голос
/ 05 марта 2009

Я предполагаю, что поскольку ваш класс наследуется от словаря, который является коллекцией, он отбрасывает привязку данных для текстового поля. В Windows Forms есть свой собственный способ связывания данных с коллекцией, отличный от связывания напрямую со свойством класса. Не очень много ответа, я знаю, но я не думаю, что на самом деле есть способ обойти это. Мое предложение было бы либо не наследовать напрямую от словаря; скорее держите внутренний словарь и выставляйте методы по мере необходимости. ИЛИ, не связывайте данные напрямую с текстовым полем. Скорее, вызывайте событие всякий раз, когда ваше свойство "Desc" изменяется в вашем классе RatesCache, а затем в вашей форме слушайте это событие. Когда это изменится, обновите текстовое поле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...