1

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

1 回答 1

1

正如对问题的评论中所讨论的那样,发生这种情况是因为实际传递给您的值转换器的是字节而不是 Int32。拆箱强制转换必须始终是准确的类型;要确定确切的类型,值得使用 Debug.WriteLine 或即时窗口检查 value.GetType().Name。

于 2010-02-11T02:02:09.740 回答