如何Mvvm交叉绑定drawableId到Imageview

How to MvvmCross Bind drawableId To Imageview

如何return转换器中的DrawableId

我的布局文件:

<ImageView
    android:id="@+id/imgTest"
    android:src="@drawable/Img_Test"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"    
    android:maxHeight="80dp"
    android:maxWidth="80dp"   
    android:layout_margin="20dp"   
    android:scaleType="fitCenter"
    local:MvxBind ="DrawableId MySwapImage(true)" />

资源文件夹中有两张图片

  1. ImgTest1.png
  2. ImgTest2.png

我的价值转换器:

public class MySwapImageValueConverter : MvxValueConverter<bool, int>
{
    protected override int Convert(bool value, Type targetType, object parameter, CultureInfo culture)
    {
        if(value)
        {
            // ImgTest1
        }
        else
        {
            // ImgTest2
        }
    }
}

你的问题是这个 Converter 不应该在你的 .Core 项目中(你的 VM 所在的项目)。此代码是特定于平台的,因为它将布尔值(与您的业务逻辑相关的东西)更改为 Drawable(仅存在于 Android 上的东西)。既然如此,它应该属于您的 .Droid 项目。

在我的项目中,我在 Droid 项目中创建了一个 Converters 文件夹来存储我所有的平台特定转换器。 MySwapImageValueConverter 的代码应如下所示

using System;
using System.Globalization;

using Cirrious.CrossCore.Converters;

namespace MilkBottle.Droid.Converters
{
    public class MySwapImageValueConverter : MvxValueConverter<bool, int>
    {
        #region Methods

        protected override int Convert(bool value, Type targetType, object parameter, CultureInfo culture)
        {
            var result = value ? Resource.Drawable.ImgTest1: Resource.Drawable.ImgTest2;
            return result;
        }

        #endregion
    }
}