我有一个简单的转换器,它检查一个对象是否等于我传递它的任何参数。我的问题是转换器参数总是作为字符串传递并且值始终作为对象传递。为了正确地比较它们,我需要将该参数强制转换为与该值相同的类型。有没有一种方法可以将一个对象的类型转换为另一个对象的类型,而无需事先知道任何类型?是否可以在不知道任何类型的情况下将一个对象转换为第二个对象的类型?
public class IsObjectEqualParameterConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null && parameter == null)
return true;
if (value == null)
return false;
// Incorrectly returns False when the ConverterParameter is an integer
// Would like to try and cast parameter into whatever type value before checking equality
// Something like: return value.Equals((parameter as value.GetType()));
return value.Equals(parameter);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
而且使用例子会是这样的:
<Button IsEnabled="{Binding Path=Index, ConverterParameter=0, Converter={StaticResource IsObjectEqualParameterConverter}}" />
如果'value'和'parameter'都是整数,那应该没问题。你能举出一个失败的例子吗? – 2010-11-19 20:08:16
ConverterParameters作为字符串传递,所以当我输入0时,它将它读作“0”并返回false。 – Rachel 2010-11-19 20:15:37
正确 - 在问题中明确说明会很有帮助。 – 2010-11-19 20:17:51