13

我正在尝试绑定图像的 src。

我试过像这样使用 MvxHttpImageView

<Mvx.MvxHttpImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/iconeView"
                local:MvxBind="{'ImageUrl':{'Path':'ImgSrc'}}" />

public string ImgSrc
{
    get {return "@res/drawable/icon.png"; }
}

我已经尝试了其他几个 ImgSrc,但仍然没有任何结果。

icon.png 在我的 Resources/Drawable 目录中,是一个 AndroidResource

任何帮助都会很棒!谢谢

4

4 回答 4

16

较新版本的 MvvmCross 支持绑定到可绘制资源。使用DrawableName 绑定,您可以将 ImageView 绑定到视图模型上包含可绘制名称的属性。

using System;
using Cirrious.MvvmCross.ViewModels;

namespace MyApp.ViewModels
{
    public class UserProfileViewModel : MvxViewModel
    {    
            // set this to the name of one of the files
            // in your Resources/drawable/drawable-xxxx folders
        private MyDrawable _myDrawable;
        public string MyDrawable { 
            get { return _myDrawable; }
            set {
                _myDrawable = value;
                RaisePropertyChanged (() => MyDrawable);
            }
        }
    }
}

在你的布局中

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        local:MvxBind="DrawableName MyDrawable"/>

或者,如果您的VM属性是int

于 2014-03-28T16:08:04.257 回答
6

mvxhttpimageview 知道如何从 http 和“磁盘”加载图像

可悲的是,它不知道如何从资源中加载

但是,有一些方法可以让图像加载静态内容。

  1. 您可以编写自己的自定义绑定
  2. 您可以使用标准的 imageview、存储在 android assets 中的图像以及 mvx 中内置的 'AssetImagePath' 绑定。

要尝试第一个,请查看会议示例 - 收藏按钮背景如何绑定到 IsFavorite

做第二个:

  • 在资产文件夹中包含图标 - 例如 /assets/icon1.png
  • 确保构建操作设置为 AndroidAsset
  • 在 XML 中使用标准的 ImageView 和绑定文本,例如 {'AssetImagePath':{'Path':'WhichAsset'}}

在实际使用中,我通常还使用转换器 - 将 Viewmodel 属性(如 State 的值为 LoadingState.Loading)映射到资产图像路径(如“/loadingimages/loading.png”)


您可以在https://github.com/slodge/MvvmCross/blob/master/Cirrious/Cirrious.MvvmCross.Binding/Android/Target/MvxImageViewDrawableTargetBinding.cs中查看资产绑定的代码


抱歉答案不包含更多代码 - 在手机上回答

于 2012-10-14T09:48:51.047 回答
4

我构建了一个转换器,它将可绘制名称转换为位图并将位图绑定到 ImageView。

转换器:

public class ImageNameToBitmapConverter : MvxValueConverter<string, Bitmap>
{
    protected override Bitmap Convert(string value, Type targetType, object parameter, CultureInfo culture)
    {

        var topActivity = Mvx.Resolve<IMvxAndroidCurrentTopActivity>();

        var bm = BitmapFactory.DecodeResource(topActivity.Activity.Resources, GetResourceId(value, "drawable", topActivity));

        return bm;
    }

    private static int GetResourceId(string variableName, string resourceName, IMvxAndroidCurrentTopActivity topActivity)
    {
        try
        {
            return topActivity.Activity.Resources.GetIdentifier(variableName, resourceName, topActivity.Activity.PackageName);
        }
        catch (Exception)
        {
            return -1;
        }
    }
}

XML 视图:

<ImageView
    local:MvxBind="Bitmap Icon, Converter=ImageNameToBitmap"
    android:layout_width="100dp"
    android:layout_height="100dp" />

Icon我绑定的属性是一个字符串,如:“ icon_name ”,我将图像icon_name.png放在 Android 项目的Resources/drawable

于 2016-07-19T08:15:20.797 回答
1

对于最新的 MvvmCross,下一个解决方案是实际的:

在标记中:

<ImageView
    android:id="@+id/iconImage"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="10dp"
    android:layout_centerVertical="true"
    local:MvxBind="DrawableName Type, Converter=TypeToImageStringConverter" />

在转换器中:

public class TypeToImageStringConverter : MvxValueConverter<VacationType, int>
{
    protected override int Convert(VacationType value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        switch (value)
        {
            case VacationType.RegularVacation:
                return Resource.Drawable.Icon_Request_Green;
            case VacationType.SickLeave:
                return Resource.Drawable.Icon_Request_Blue;
            case VacationType.LeaveWithoutPay:
                return Resource.Drawable.Icon_Request_Dark;
            case VacationType.OvertimeVacation:
                return Resource.Drawable.Icon_Request_Gray;
            case VacationType.ExceptionalLeave:
                return Resource.Drawable.Icon_Request_Plum;
            default:
                return Resource.Drawable.Icon_Request_Gray;
        }
    }
}

所有的感觉是你必须给出一个可绘制的资源ID。

于 2017-11-24T14:14:04.093 回答