开发者

What is best practise for IValueConverter?

What is best practise for IValueConverter: Is it ok to put Exception in Convert method or should it return "something"?

Here is an example:

[ValueConversion(typeof(float), typeof(String))]
public class PercentConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value == null || string.IsNullOrEmpty(value.ToString()))
            return string.Empty;

        if (value is float) //Edited to support CultureInfo.CurrentCulture,
            return string.Format(culture, "{0:n}{1}", ((float)value) * 100, "%");

        //** Is it ok to put Exception here or should I return "something" here? **
        throw new Exception("Can't convert from " + value.GetType().Name + ". Expected type if float.");
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)开发者_运维技巧
    {
        throw new NotSupportedException("Converting back is not implemented in " + this.GetType());
    }
}


If you fail to convert (malformed values, types, ...), return DependencyProperty.UnsetValue.

It indicates that the converter produced no value and that the binding uses the FallbackValue, if available, or the default value instead.

Also, you should convert data with culture-specific conversion or invariant conversions to be on the safe side.


I personally recommend using singleton converters. Then you don't have to create an instance at every usage site, but can reference the converter like this:

Converter={x:Static SomeNamespace:SomeConverter.Instance}


You've ignored CultureInfo while parsing the string.

Always take in to account the culture info passed otherwise it would always work on Thread's CurrentCulture.

I could give some thing like "7.34,123" as input, would your code work?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜