没有在image.source中描绘使用转换器

时间:2014-11-03 01:20:28

标签: c# wpf

我的图像绑定如下:

<Image x:Name="ImgFoto" Source="{Binding Path=Foto, 
                      Converter={StaticResource imageConverter}, Mode=TwoWay, 
                      UpdateSourceTrigger=PropertyChanged}" Stretch="Fill" 
                      HorizontalAlignment="Left" 
                      Height="148" Margin="25,23,0,0" VerticalAlignment="Top" 
                      Width="193"/>"

“Foto”是Image

类型的SQL字段

我的转换器类:

public sealed class ImageConverter : IValueConverter
{
    public object Convert(object value, Type targetType,
                          object parameter, CultureInfo culture)
    {
        try
        {
            return new BitmapImage(new Uri((string)value));
        }
        catch
        {
            return new BitmapImage();
        }
    }

    public object ConvertBack(object value, Type targetType,
                              object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

我的问题是,当您运行应用程序时,图像显示为空白。

3 个答案:

答案 0 :(得分:1)

SQL Image类型是二进制文件,因此您必须将二进制文件转换为bitmapimage而不是uri soirce。尝试下面的转换器

public sealed class ImageConverter : IValueConverter
{
    public object Convert(object value, Type targetType,
                          object parameter, CultureInfo culture)
    {
        if (value == null || value.Length == 0) return null;
       var image = new BitmapImage();
       using (var mem = new MemoryStream((byte[])value))
       {
           mem.Position = 0;
           image.BeginInit();
           image.CreateOptions = BitmapCreateOptions.PreservePixelFormat;
           image.CacheOption = BitmapCacheOption.OnLoad;
           image.UriSource = null;
           image.StreamSource = mem;
           image.EndInit();
       }
       image.Freeze();
       return image;
    }

    public object ConvertBack(object value, Type targetType,
                              object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

答案 1 :(得分:0)

  

“Foto”是Image

类型的SQL字段

如果是图像类型的字段,则它以二进制格式存储,在转换器中,您将其转换为字符串。这将永远不会起作用,因为它是二进制格式。您需要获取字节并将其转换为Bitmap,然后将其返回。

此外,如果您不打算更改图片,请将其OneWay绑定。

答案 2 :(得分:0)

我的新XAML是:

            <Image x:Name="ImgFoto" Source="{Binding Foto}"  Stretch="Fill" HorizontalAlignment="Left" 
                       Height="148" Margin="25,23,0,0" VerticalAlignment="Top" Width="193"/>

我的Charge Image代码:

  private void BtnCargarFoto_Click(object sender, RoutedEventArgs e)
    {
        OpenFileDialog OD = new OpenFileDialog();
        OD.Filter = "jpg(*.jpg)|*.jpg|png(*.png)|*.png|gif(*.gif)|*.gif|bmp(*.bmp)|*.bmp|All Files(*.*)|*.*";
        if (OD.ShowDialog() == true)
        {
            using (Stream stream = OD.OpenFile())
            {
                bitCoder = BitmapDecoder.Create(stream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad);
                ImgFoto.Source = bitCoder.Frames[0];
            }
            System.IO.FileStream fs = new System.IO.FileStream(OD.FileName, System.IO.FileMode.Open);
            foto = new byte[Convert.ToInt32(fs.Length.ToString())];
            fs.Read(foto, 0, foto.Length);
        }
    }

问题:

绑定非常好。 现在的问题是,当对记录上的图像进行充电时,所有其他记录中都会出现相同的图像。 在通过Listview查看记录时加载并保存图像后,Image.Source对每个人都是相同的。 我必须退出并重新输入Image.Source的应用程序才能正确刷新。 非常感谢。