Pergunta

Eu estou tentando vincular à minha classe personalizada dicionário. Em FormLoad, posso ligar a Car.Desc mas não posso ligar a RatesCache.Desc. Ambos são propriedades de cadeia públicas.

O que eu estou ausente?

Obrigado!

System.ArgumentException estava sem tratamento Message = "Não é possível ligar à propriedade ou coluna de desconto na fonte de dados \ r \ nome nParameter:. DataMember" Fonte = "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");
    }
Foi útil?

Solução

Meu palpite é que, porque sua classe é herdada de um dicionário que é uma coleção, ela joga fora o DataBinding para a caixa de texto. Windows Forms tem a sua própria maneira de lidar com ligação de dados para um diferente coleção, então quando a ligação diretamente para uma propriedade de uma classe. Não muito de uma resposta, eu sei, mas eu não acho que há realmente uma maneira de contornar isso. Minha sugestão seria ou não diretamente herdar de dicionário; sim manter um dicionário interno, e expor métodos, conforme necessário. OR, não vincular o texbox diretamente. Em vez disso, elevar um evento sempre que sua propriedade "desconto" muda em sua classe RatesCache, e, em seguida, em seu formulário de ouvir esse evento. Quando se muda, atualizar sua caixa de texto.

Outras dicas

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;
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top