无法将“MS.Internal.NamedObject”类型的对象强制转换为BitmapImage
我正在构建一个WPF应用程序,我在其中收到错误
无法将“MS.Internal.NamedObject”类型的对象转换为“System.Windows.Media.Imaging.BitmapImage”类型
XAML代码 :
C#转换器代码 :
public class ImageConverter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) { bool isClosed = (bool)values[0]; bool isChecked = (bool)values[1]; bool isActive = (bool)values[2]; Image img = new Image(); switch ((string)parameter) { case "Active": if (isClosed == true && isChecked == true) { if (isActive == true) { img.Source = (BitmapImage)values[3]; img.Stretch = Stretch.Fill; } else { img.Source = (BitmapImage)values[4]; img.Stretch = Stretch.Fill; } } break; } return img; } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } }
TickImage和CrossImage是ViewModel类的属性。 它们在ViewModel构造函数中初始化,如下所示。
TickImage = new BitmapImage(new Uri("K:\\projects\\ContentSets\\Ownership\\SOMA\\Staging\\SOMA\\Images\\icon_tick.gif", UriKind.Absolute)); CrossImage = new BitmapImage(new Uri("K:\\projects\\ContentSets\\Ownership\\SOMA\\Staging\\SOMA\\Images\\icon_cross.gif", UriKind.Absolute)); TickImage.Freeze(); CrossImage.Freeze();
IsClosed,IsChecked和IsActive是DataObject类的属性。
错误发生在条件的第一行if (isActive == true)
我也尝试了以下XAML代码:
TickImage和CrossImage是ViewModel中的简单字符串,并且在Converter中进行必要的更改时会抛出相同的错误,如下所示
无法将“MS.Internal.NamedObject”类型的对象强制转换为“System.String”类型
我很确定你的绑定是不正确的。 当您在CellTemplate
执行绑定时,实际上是绑定到单元格的DataContext而不是视图的DataContext(即视图模型)。
您应该尝试修改绑定以从视图模型中获取值,例如: