有人知道如何在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控件来绑定它。
要做到这一点,您需要这样做:
- 从
ImageView
继承一个新的MyImageView
- 添加默认构造函数(它将上下文和属性传递给基本构造函数)
-
为
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中如何执行自定义绑定属性