2

有谁知道如何将 byte[] (图像)绑定到 axml 视图中的 Image 控件。我的 ViewModel 继承自 MvxViewModel。我所有的其他绑定都很好,但我找不到绑定该图像的方法。

4

2 回答 2

4

你可以更轻松地做到这一点,我在偶然发现这个问题后也发现了这一点:

由于用于为 a 设置位图的 Android 绑定ImageViewBitmap(如您在 [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

于 2015-01-08T14:52:58.620 回答
2

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

为此,您需要执行以下操作:

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

    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);
         }
    }
    

MyImageView然后,您可以在 axml 中使用该控件而不是普通的ImageView.

注意 - 上面的代码未经测试 - 但一旦你在视图中获得 byte[],我相信你会弄清楚要使用的 Droid 代码。


作为对此的替代方法,您还可以使用自定义绑定将 a 绑定byte[]到法线ImageView- 请参阅In MvvmCross 如何执行自定义绑定属性中的自定义绑定示例

于 2013-01-07T17:50:52.227 回答