gpt4 book ai didi

c# - 无法将类型为 'MS.Internal.NamedObject' 的对象转换为 BitmapImage

转载 作者:可可西里 更新时间:2023-11-01 09:11:53 28 4
gpt4 key购买 nike

我正在构建一个 WPF 应用程序,但在其中出现错误

Unable to cast object of type 'MS.Internal.NamedObject' to type 'System.Windows.Media.Imaging.BitmapImage'

XAML 代码:

<DataGridTemplateColumn Header="Active" Width="60">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button>
<Button.Content>
<MultiBinding Converter="{StaticResource myImageConverter}"
ConverterParameter="Active">
<Binding Path="IsClosed"/>
<Binding Path="IsChecked"/>
<Binding Path="IsActive"/>
<Binding Path="TickImage"/>
<Binding Path="CrossImage"/>
</MultiBinding>
</Button.Content>
</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>

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 代码:

<Button.Content>
<Image>
<Image.Source>
<MultiBinding Converter="{StaticResource myImageConverter}"
ConverterParameter="Active">
<Binding Path="IsClosed"/>
<Binding Path="IsChecked"/>
<Binding Path="IsActive"/>
<Binding Path="TickImage"/>
<Binding Path="CrossImage"/>
</MultiBinding>
</Image.Source>
</Image>
</Button.Content>

TickImage 和 CrossImage 是 ViewModel 中的简单字符串,在 Converter 中进行必要的更改后,会抛出相同的错误,如下所示

Unable to cast object of type 'MS.Internal.NamedObject' to type 'System.String'

最佳答案

我很确定您的绑定(bind)不正确。当您在 CellTemplate 中执行绑定(bind)时,您实际上是在绑定(bind)到单元格的 DataContext 而不是 View 的 DataContext(即 View 模型)。

您应该尝试修改您的绑定(bind)以从您的 View 模型中获取值,例如:

<Binding Path="DataContext.TickImage" RelativeSource="{RelativeSource AncestorType=DataGrid}" />

关于c# - 无法将类型为 'MS.Internal.NamedObject' 的对象转换为 BitmapImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18866308/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com