这是我实现IValueConverter的类:
[ValueConversion(typeof(int), typeof(Priority))]
public class PriorityConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return (Priority) (int) value;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
似乎这行代码抛出了InvalidCastException:
return (Priority) (int) value;
(优先级是一个枚举)我在方法的开头放了一个断点,“value”的值是int:4所以我不知道为什么抛出这个异常。 这是资源(其中app_data =“clr-namespace:AssignmentOrganizer.App_Data”):
<app_data:PriorityConverter x:Key="PriorityConverter" />
<app_data:KindConverter x:Key="KindConverter" />
以下是实施:
<gridview:GridViewDataColumn Header="Priority" Width="100" DataMemberBinding="{Binding Priority, Converter={StaticResource PriorityConverter}}" />
<gridview:GridViewDataColumn Header="Kind" Width="100" DataMemberBinding="{Binding Kind, Converter={StaticResource KindConverter}}" />
答案 0 :(得分:1)
正如对问题的评论中所讨论的,这是因为实际传递给您的值转换器的是Byte而不是Int32。拆箱转换必须始终为确切类型;要确定确切的类型,值得检查value.GetType()。名称使用Debug.WriteLine或立即窗口。