2015-12-08 108 views
1

我想實現本地化的BooleanConverter。目前爲止一切正常,但當你雙擊屬性下一條消息正在顯示:自定義本地化BooleanConverter

「對象的類型'System.String'不能轉換爲'System.Boolean'類型。

我想問題是在具有該布爾屬性的TypeConverter的CreateInstance方法中。

public class BoolTypeConverter : BooleanConverter 
{ 
    private readonly string[] values = { Resources.BoolTypeConverter_False, Resources.BoolTypeConverter_True }; 

    public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) 
    { 
     if (destinationType == typeof(string) && value != null) 
     { 
      var valueType = value.GetType(); 

      if (valueType == typeof(bool)) 
      { 
       return values[(bool)value ? 1 : 0]; 
      } 
      else if (valueType == typeof(string)) 
      { 
       return value; 
      } 
     } 

     return base.ConvertTo(context, culture, value, destinationType); 
    } 

    public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) 
    { 
     var stringValue = value as string; 

     if (stringValue != null) 
     { 
      if (values[0] == stringValue) 
      { 
       return true; 
      } 
      if (values[1] == stringValue) 
      { 
       return false; 
      } 
     } 

     return base.ConvertFrom(context, culture, value); 
    } 

    public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) 
    { 
     return new StandardValuesCollection(values); 
    } 
} 

回答

1

你的代碼的主要問題是你錯誤地覆蓋了GetStandardValues

其實你並不需要重寫GetStandardValues,只是刪除它,你會得到預期的結果,就像原來的布爾轉換器,同時顯示您所需的字符串:當重寫GetStandardValues

enter image description here

應返回您正在創建轉換器的類型的支持值列表,然後使用提供字符串表示值的ConvertTo並使用ConvertFrom提供一種將字符串值轉換爲類型的方法。

相關問題