无法将“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(即视图模型)。

您应该尝试修改绑定以从视图模型中获取值,例如: