处理图像缓存的正确方法,例如毕加索与MvvmCross

时间:2016-07-19 16:06:20

标签: android xamarin mvvmcross

我使用的是RecyclerView,使用MvvmCross对Recycler项进行数据绑定。每个数据绑定对象都包含imageurl,我试图使用Picasso图像库加载它。我的第一个想法是在ValueConverter中调用Picasso。要使用Picasso我需要上下文对象,我不确定是否可以将数据绑定ImageView作为参数传递给转换器。这是代码......

public class MyImageConverter : IMvxValueConverter
{
    protected override object Convert(object value, object parameter)
    {       
        var imageUrl = (string)value;
        // How to optain context or direct access to imageView?
        var imageView = new ImageView(context);
        Picasso.With(context).Load(imageUrl).Into(imageView);
        var bitmap = ((BitmapDrawable)imageView.Drawable).Bitmap;
        return bitmap;
    }
}

和axml片段

<ImageView android:id="@+id/myImageView"
app:MvxBind="Bitmap MyImageConverter(ImageUrl)" />

最好处理Picasso加载异步,但我仍然需要访问项目ImageView。

1 个答案:

答案 0 :(得分:1)

您应该创建自定义目标绑定。

例如参见:mvvmcross videoview URL binding

自从我写完最后一个答案以来,事情已经被移动了,所以这里是指向当前Android绑定的链接。

https://github.com/MvvmCross/MvvmCross/blob/4.0/MvvmCross/Binding/Droid/MvxAndroidBindingBuilder.cs