xamarin.MvvmCross Android Bind Image from byte[]



有人知道如何在axml视图中将byte[] (image)绑定到image控件吗?我的ViewModel继承自MvxViewModel。我所有的其他绑定工作得很好,但我找不到一个方法来绑定这个图像。

你可以做得更简单,我也发现在绊倒那个问题后:

ImageView设置位图的android绑定是Bitmap(正如你在[1]中看到的那样),你可以这样配置你的视图:

    <ImageView
        local:MvxBind="Bitmap ByteArrayToImage(ImageByteArray)" />

然后您只需要定义一个ValueConverter,称为ByteArrayToImageValueConverter,它将字节数组转换为Bitmap的实例。对我来说,使用ValueConverter是创建自定义绑定的首选方法;)

您已经有了将字节数组转换为位图的代码:BitmapFactory.DecodeByteArray(_rawImage, 0,_rawImage.Length);

[1] https://github.com/MvvmCross/MvvmCross/blob/bbf9a2ac76e74d9404f4b57036c6e29dfe2cc6c3/Cirrious/Cirrious.MvvmCross.Binding.Droid/MvxAndroidBindingBuilder.cs L79

我认为你可以使用自定义UI控件来绑定它。

要做到这一点,您需要这样做:

  1. ImageView继承一个新的MyImageView
  2. 添加默认构造函数(它将上下文和属性传递给基本构造函数)
  3. MyImageView添加一个新的RawImage属性,实现如下:

    private byte[] _rawImage;
    public byte[] RawImage
    {
         get { return _rawImage; }
         set 
         {
                 _rawImage = value;
                 if (_rawImage == null)
                         return;
                 var bitmap = BitmapFactory.DecodeByteArray(_rawImage, 0,_rawImage.Length);
                 SetImageBitmap(bitmap);
         }
    }
    

你可以在你的axml中使用MyImageView控件而不是普通的ImageView

注意-上面的代码没有经过测试-但是一旦你在View中得到byte[],我相信你会找出要使用的Droid代码。


作为一种替代方法,您还可以使用自定义绑定将byte[]绑定到普通ImageView—参见in MvvmCross中如何执行自定义绑定属性

中的自定义绑定示例

最新更新