使用绑定转换器在WPF中异步加载映像
本文关键字:异步 加载 映像 WPF 绑定 转换器 | 更新日期: 2023-09-27 17:58:24
我有一个绑定设置如下的图像控件:
<Image Stretch="Uniform" Source="{Binding Path=CurrentItem, Converter={StaticResource ImgConverter}, IsAsync=True}"/>
ImgConverter
是:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string uri = null;
Compressor.Unzip((value as Zipfile));
uri = string.Format("{0}{1}.jpg", Compressor.TempPath, value.ToString());
return uri;
}
Compressor.Unzip(...)
方法确实需要一些时间。我设置了绑定IsAsync=True
,但它不起作用(不在转换器上,但只在路径上?)。如何异步处理此问题?
将只读Image
属性添加到Zipfile类中,并将转换器代码移动到属性getter:
public class Zipfile
{
...
public ImageSource Image
{
get
{
Compressor.Unzip(this);
var uri = string.Format("{0}{1}.jpg", Compressor.TempPath, this.ToString());
return new BitmapImage(new Uri(uri));
}
}
}
然后这样写你的绑定:
<Image Source="{Binding Path=CurrentItem.Image, IsAsync=True}"/>
使用带有两个绑定的Multibinding,第一个是自映像控制,第二个是您当前的绑定,在转换器中您可以调用async您的方法来解压缩文件,在回调中您可以设置映像路径(参考第一个绑定);你也可以看到这个例子:
http://social.msdn.microsoft.com/Forums/en-US/7fc238ea-194e-4f29-bcbd-9a3d4bdb2180/async-loading-of-bitmapsource-in-value-converter?forum=wpf