public object GetClrValue(Type propertyType, string propertyValueString) { if (!(propertyType.GetTypeInfo() .IsAssignableFrom(propertyValueString.GetType().GetTypeInfo()))) { TypeConverter converter = null; converter = typeConverterProvider.GetConverterFromProperty(propertyValueString, propertyType); if (converter == null) { converter = typeConverterProvider.GetConverter(propertyType); } if (converter != null) { return(converter.ConvertFromInvariantString(propertyValueString)); } else if (propertyType == typeof(bool)) { return(propertyValueString.Equals("true")); } else if (propertyType == typeof(Color)) { return(Color.FromHex(propertyValueString as string)); } else if (propertyType == typeof(LayoutOptions)) { return(propertyType.GetFieldReliable(propertyValueString).GetValue(null)); } else if (propertyType.GetTypeInfo().IsEnum) { return(Enum.Parse(propertyType, propertyValueString as string)); } else { return(Convert.ChangeType(propertyValueString, propertyType)); } } return(propertyValueString); }
public object GetBindablePropertyValue(Type frameworkElementType, BindableProperty bindableProperty, object propertyValue) { if (!(bindableProperty.ReturnType.GetTypeInfo() .IsAssignableFrom(propertyValue.GetType().GetTypeInfo()))) { Type propertyType = bindableProperty.ReturnType; TypeConverter converter = null; converter = typeConverterProvider.GetConverterFromProperty(bindableProperty.PropertyName, frameworkElementType); if (converter == null) { converter = typeConverterProvider.GetConverter(propertyType); } if (converter != null) { propertyValue = converter.ConvertFromInvariantString(propertyValue as string); } else if (propertyType == typeof(bool)) { propertyValue = propertyValue.Equals("true"); } else if (propertyType == typeof(Color)) { propertyValue = Color.FromHex(propertyValue as string); } else if (propertyType == typeof(LayoutOptions)) { propertyValue = propertyType.GetRuntimeFields().First(x => x.Name == propertyValue as string).GetValue(null); } else if (propertyType.GetTypeInfo().IsEnum) { propertyValue = Enum.Parse(propertyType, propertyValue as string); } else { propertyValue = Convert.ChangeType(propertyValue, propertyType); } } return(propertyValue); }