我的图像绑定如下:
<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();
}
}
我的问题是,当您运行应用程序时,图像显示为空白。
答案 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的应用程序才能正确刷新。 非常感谢。