MvvmCross图像url绑定以使用默认drawable处理回退

时间:2018-02-16 22:57:07

标签: android xamarin data-binding mvvmcross

我有一个带有图片网址的数据源,通常我用

处理
 <Mvx.MvxImageView
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:scaleType="fitXY"
            local:MvxBind="ImageUrl PosterThumbUrl" />

但是,某些记录没有图像(PosterThumbUrl为空)。所以,理想情况下我希望有这样的东西:

 <Mvx.MvxImageView
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:scaleType="fitXY"
            local:MvxBind="ImageUrl DefaultImage(PosterThumbUrl, 'back_no_image.png')" />

(即,如果网址为空,则放置可绘制的后备图像)。

从我看到的,我需要创建数据转换器,但我不知道如何处理DataConverter:默认图像(自动)加载以及手动@drawable图像处理。

我想出的是(如果网址为空,则在数据转换器内部):

            return BitmapFactory.DecodeResource(topActivity.Activity.Resources,  GetResourceId(defaultImage, "drawable", topActivity));

            // otherwise
            return base.Convert(value, targetType, parameter, culture);

但在这种情况下它没有处理默认的网址加载。

那么,有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:0)

可以使用ValueConverter

完成此操作

https://www.mvvmcross.com/documentation/fundamentals/value-converters

由于ImageUrl的类型为字符串,因此我们将使用返回字符串MvxValueConverter<string, string>的值转换器。

public class StringValueConverter : MvxValueConverter<string, string>
{
    protected override string Convert(string value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value == null || value == string.Empty)
            return parameter as string;

        return value;
    }
}

属性parameter包含布局文件中设置的默认值:

 <Mvx.MvxImageView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:scaleType="fitXY"
        local:MvxBind="ImageUrl StringValue(PosterThumbUrl, 'back_no_image.png')" />