Pregunta

Estoy intentando enlazar a mi clase de diccionario personalizado. En formLoad, puedo vincularme a Car.Desc pero no puedo vincularme a RatesCache.Desc. Ambas son propiedades de cadena públicas.

¿Qué me estoy perdiendo?

¡Gracias!

System.ArgumentException no fue manejado   Mensaje = " No se puede vincular a la propiedad o columna Desc en el DataSource. \ R \ nNombre del parámetro: dataMember "   Fuente = " 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");
    }
¿Fue útil?

Solución

Mi conjetura es que debido a que su clase está heredando de un Diccionario que es una Colección, desecha el Enlace de Datos para el cuadro de texto. Windows Forms tiene su propia forma de tratar con el enlace de datos a una colección diferente que cuando se vincula directamente a una propiedad de una clase. No hay mucha respuesta, lo sé, pero no creo que realmente haya una forma de evitarlo. Mi sugerencia sería no heredar directamente del Diccionario; más bien, mantenga un Diccionario interno y exponga los métodos según sea necesario. O, no enlace datos al cuadro de texto directamente. En cambio, organice un evento cada vez que su " Desc " cambios de propiedad en su clase RatesCache, y luego en su formulario escuche ese evento. Cuando cambie, actualice su cuadro de texto.

Otros consejos

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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top