MVVMCross将ImageView绑定到android资源ID而不是资源路径

时间:2014-09-23 11:23:44

标签: c# android xamarin xamarin.android mvvmcross

我有一个带有ImageView的布局。我希望根据我的核心项目中的逻辑显示不同的图像。将图像添加到资源文件夹并将其与转换器绑定起作用。对于我的ValueConverter:

public class MyImageValueConverter : MvxValueConverter<MyMap, string>
{

    protected override string Convert(MyMap value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return GetResourcePath(value);
    }

    private string GetResourcePath(MyMap map)
    {   
        string path = "";

        switch (map)
        {
            case MyMap.Map1:
                path = "map1.png";
                break;
            case MyMap.Map2:
                path = "map2.png";
                break;
            default:
                throw new Exception("no image for map: " + map.ToString());
        }

        return path;
    }
}

在我看来,我这样绑定它:

...
var map = FindViewById<MvxImageView>(Resource.Id.my_imageview);
set.Bind(map).For("AssetImagePath").To(vm => vm.CurrentMap).WithConversion("MyImage");
...

现在回答我的问题。我更倾向于从资源drawable设置图像,但我还没有找到一种方法来做到这一点。我觉得我应该只能从我的转换器返回一个资源ID,并将它绑定到某个属性(哪个?)。

或者我可以创建一个继承自MvxImageView的新类,并添加一个我可以执行单向绑定的属性,它调用SetImageResource()。甚至可以采用完全自定义的绑定方式。这些似乎都不是很好。

1 个答案:

答案 0 :(得分:2)

绑定到MvxImageView的DrawableId

看看MvxAndroidBindingBuilder,它有一些隐藏的宝石:

https://github.com/MvvmCross/MvvmCross/blob/v3.1/Cirrious/Cirrious.MvvmCross.Binding.Droid/MvxAndroidBindingBuilder.cs#L103