There’s a lot of “goodness” buried in WinForms databinding that doesn’t get to see the light of day. Here’s one example I discovered just today …

When you set up a Binding, one of the possible parameters is a boolean value for enable formatting:

    var binding 
        = new Binding(
            "EditValue",  // Name of the control property to bind
            aSubject,     // Data source
            aProperty,    // Path of property on the data source
            true,         // Is Formatting Enabled
            DataSourceUpdateMode.OnPropertyChanged);

The interesting thing is that turning enable formatting on does more than enable the Format and Parse events.

Check out the OnFormat() method of the Binding object, for example:

    protected virtual void OnFormat(ConvertEventArgs cevent)
    {
        if (onFormat != null)
        {
            onFormat(this, cevent);
        }

        if (!formattingEnabled
            && !(cevent.Value is DBNull)
            && cevent.DesiredType != null
            && !cevent.DesiredType.IsInstanceOfType(cevent.Value)
            && cevent.Value is IConvertible)
        {
            cevent.Value
                = Convert.ChangeType(
                    cevent.Value,
                    cevent.DesiredType,
                    CultureInfo.CurrentCulture);
        }
    }

If you turn on formatting, you also turn on automatic conversions between types that implement IConvertible. Amongst other things, this allows you to databind to nullable properties.

Neat.

Comments

blog comments powered by Disqus