【发布时间】:2010-02-11 01:20:08
【问题描述】:
这是我实现 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}}" />
【问题讨论】:
-
我们需要更多关于这个优先级的信息...
-
检查该值是否绝对是一个 int -- 不是
int?或 long 或 short 等。你能做一个 Debug.WriteLine(value.GetType().Name) 并告诉我们它打印的内容吗? -
RCIX,优先级是一个具有小值(0-4)的枚举。 Itowlson,在调试器中,当我悬停对象值时,它会显示“value = 4”。
-
Mohit:悬停在调试器中并不总是提供完整的信息。如果打印 value.GetType().Name 会发生什么? (您可以在调试器中停止时在立即窗口中执行此操作。)
-
绑定源类的 Priority 属性的定义是什么?
标签: c# converter ivalueconverter .net