转换器中的InvalidCastException

时间:2010-02-11 01:20:09

标签: c# converter ivalueconverter .net

这是我实现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}}" />

1 个答案:

答案 0 :(得分:1)

正如对问题的评论中所讨论的,这是因为实际传递给您的值转换器的是Byte而不是Int32。拆箱转换必须始终为确切类型;要确定确切的类型,值得检查value.GetType()。名称使用Debug.WriteLine或立即窗口。