过去,每当我想要显示一张图片时,我就将图片路径绑定到图片的源属性上。太简单了。
现在我想更改图片并始终显示最新更改的图片。更改后的图片保存在我的类中的一个 BitmapImage 属性中。因此,我不想要求图像控件从磁盘加载图像,而是直接将其绑定到我的 BitmapImage 属性。但是图片没有显示出来。
然后(仅用于测试),我创建了一个值转换器,在其中使用图像路径创建了一个 BitmapImage,并将其返回给控件 - 图像就显示出来了。
再次强调:从转换器内部的路径创建 BitmapImage 可以正常工作。但是将图像控件绑定到在我的类中使用相同代码创建的 BitmapImage 属性失败。
这描述了相同的问题,但“解决方案”无效。(我想知道为什么它被标记为已解决,因为 OP 发表了相同的评论)
现在我想更改图片并始终显示最新更改的图片。更改后的图片保存在我的类中的一个 BitmapImage 属性中。因此,我不想要求图像控件从磁盘加载图像,而是直接将其绑定到我的 BitmapImage 属性。但是图片没有显示出来。
然后(仅用于测试),我创建了一个值转换器,在其中使用图像路径创建了一个 BitmapImage,并将其返回给控件 - 图像就显示出来了。
再次强调:从转换器内部的路径创建 BitmapImage 可以正常工作。但是将图像控件绑定到在我的类中使用相同代码创建的 BitmapImage 属性失败。
这描述了相同的问题,但“解决方案”无效。(我想知道为什么它被标记为已解决,因为 OP 发表了相同的评论)
编辑:以下是一些代码
这是成功创建可见图像的转换器。
public class BsConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
BitmapImage bi = new BitmapImage(new Uri(value.ToString()));
return bi;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
...以及显示图像的XAML绑定。 File
的类型为 FileInfo
,而 FullName
保存了完整路径。
<Image MinHeight="100" MinWidth="100" Source="{Binding SelectedImage.File.FullName, Converter={StaticResource BsConverter}}"/>
我有一个属性BitmapImage image { get; set; }
,我在类的构造函数中初始化它:
image = new BitmapImage();
image.BeginInit();
image.UriSource = new Uri(file.FullName);
image.CacheOption = BitmapCacheOption.OnLoad;
image.EndInit();
...和绑定。但是-没有成功。图像未显示。
<Image MinHeight="100" MinWidth="100" Source="{Binding SelectedImage.image}"/>
image
属性需要是公共的。为了在属性值更改时更新绑定,您需要实现 INotifyPropertyChanged 接口,或将image
设为依赖属性。广泛接受的 编码规范 建议使用帕斯卡命名法来命名属性,因此应该使用Image
。 - Clemens