Tuesday, February 26, 2013

IValueConverter incompatible, Pain level 3

Win8 seems to randomly break IValueConverter by making the last parameter a string instead of CultureInfo!  I haven’t found the correct way to fix this, but at least this compiles Win8 and WP8:

public class BooleanConverter<T> : IValueConverter
{
    public BooleanConverter(T trueValue, T falseValue)
    {
        True = trueValue;
        False = falseValue;
    }
 
    public T True { get; set; }
    public T False { get; set; }
 
    public virtual object Convert(object value, Type targetType, object parameter, string language)
    {
        return value is bool && ((bool)value) ? True : False;
    }
 
    public virtual object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        return value is T && EqualityComparer<T>.Default.Equals((T)value, True);
    }
 
#if !WINFX_CORE
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return Convert(value, targetType, parameter, "");
    }
 
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return ConvertBack(value, targetType, parameter, "");
    }
#endif
}

No comments: