我有一个像这样的绑定设置的Image控件:
<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
,但它不起作用(不在转换器上但只在路径上?)。我该如何异步处理?
答案 0 :(得分:1)
将只读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}"/>
答案 1 :(得分:0)
使用带有两个绑定的多重绑定,首先是自我图像控制,第二个是你当前的绑定,在转换器中你可以调用async你的方法来解压缩文件,在回调中你可以设置图像路径(参考第一次约束); 你也可以看到这个样本: