How do I use a ValueConverter with Databinding in Winforms

后端 未结 2 2031
攒了一身酷
攒了一身酷 2021-02-14 05:31

In WPF it is easy to use a ValueConverter to format values etc, (in our case convert some numbers into a different unit, e.g km to miles)

I know it can be done in Winf

2条回答
  •  生来不讨喜
    2021-02-14 05:46

    You can use a TypeConverter if you're able and willing to decorate the data source property with a custom attribute.

    Otherwise you have to attach to the Parse and Format events of a Binding object. This, unfortunately, eliminates using the designer for your binding for all but the simplest scenarios.

    For example, let's say you wanted a TextBox bound to an integer column representing kilometers and you wanted the visual representation in miles:

    In the constructor:

    Binding bind = new Binding("Text", source, "PropertyName");
    
    bind.Format += bind_Format;
    bind.Parse += bind_Parse;
    
    textBox.DataBindings.Add(bind);
    

    ...

    void bind_Format(object sender, ConvertEventArgs e)
    {
        int km = (int)e.Value;
    
        e.Value = ConvertKMToMiles(km).ToString();
    }
    
    void bind_Parse(object sender, ConvertEventArgs e)
    {
        int miles = int.Parse((string)e.Value);
    
        e.Value = ConvertMilesToKM(miles);
    }
    

提交回复
热议问题