如何在 IValueConverter 中使用 targetType 参数?
How do I use the targetType parameter in an IValueConverter?
我有一个 IValueConverter
,我想用它来做简单的数学运算,它具有以下 Convert
函数:
public object Convert(
object value,
Type targetType,
object parameter,
CultureInfo culture)
{
if (parameter == null)
{
return value;
}
switch (((string)parameter).ToCharArray()[0])
{
case '%':
return (double)value % double.Parse(
((string)parameter).TrimStart(new char[] {'%'}));
case '*':
return (double)value * double.Parse(
((string)parameter).TrimStart(new char[] {'*'}));
case '/':
return (double)value / double.Parse(
((string)parameter).TrimStart(new char[] {'/'}));
case '+':
return (double)value + double.Parse(
((string)parameter).TrimStart(new char[] {'+'}));
case '-':
if (((string)parameter).Length > 1)
{
return (double)value - double.Parse(
((string)parameter).TrimStart(new char[] {'-'}));
}
else
{
return (double)value * -1.0D;
}
default:
return DependencyProperty.UnsetValue;
}
}
显然这不适用于每种情况,因为某些属性属于 int
.
类型
我知道 targetType
参数可能是我需要在此转换器中使用的参数,但我没有找到如何正确使用它来将 return 值转换为什么的示例它需要相应地。
有人知道如何在这种情况下使用 targetType
参数吗?
你可以做到这一点
var typeCode = Type.GetTypeCode(targetType); // Pass in your target type
if(typeCode == TypeCode.Int32)
{
// it is int type
}
这应该可以在没有太多开销的情况下工作:
public object Convert(
object value, Type targetType, object parameter, CultureInfo culture)
{
double result = ... // your math
return System.Convert.ChangeType(result, targetType);
}
我有一个 IValueConverter
,我想用它来做简单的数学运算,它具有以下 Convert
函数:
public object Convert(
object value,
Type targetType,
object parameter,
CultureInfo culture)
{
if (parameter == null)
{
return value;
}
switch (((string)parameter).ToCharArray()[0])
{
case '%':
return (double)value % double.Parse(
((string)parameter).TrimStart(new char[] {'%'}));
case '*':
return (double)value * double.Parse(
((string)parameter).TrimStart(new char[] {'*'}));
case '/':
return (double)value / double.Parse(
((string)parameter).TrimStart(new char[] {'/'}));
case '+':
return (double)value + double.Parse(
((string)parameter).TrimStart(new char[] {'+'}));
case '-':
if (((string)parameter).Length > 1)
{
return (double)value - double.Parse(
((string)parameter).TrimStart(new char[] {'-'}));
}
else
{
return (double)value * -1.0D;
}
default:
return DependencyProperty.UnsetValue;
}
}
显然这不适用于每种情况,因为某些属性属于 int
.
我知道 targetType
参数可能是我需要在此转换器中使用的参数,但我没有找到如何正确使用它来将 return 值转换为什么的示例它需要相应地。
有人知道如何在这种情况下使用 targetType
参数吗?
你可以做到这一点
var typeCode = Type.GetTypeCode(targetType); // Pass in your target type
if(typeCode == TypeCode.Int32)
{
// it is int type
}
这应该可以在没有太多开销的情况下工作:
public object Convert(
object value, Type targetType, object parameter, CultureInfo culture)
{
double result = ... // your math
return System.Convert.ChangeType(result, targetType);
}