如何在MvvmCross中将imageSource绑定到ImageView

时间:2014-04-17 19:50:40

标签: uiimageview xamarin touch converter mvvmcross

我无法将带转换器的源绑定到Touch项目中的imageview。我找到了herehere如何在Android

中创建它
public class TypeToSourceConverter : MvxValueConverter<int, string>
{
    protected override string Convert (int value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        var assetName = ((AppConstants.Type)value).ToString ().ToLower ();
        return "Images/" + assetName + ".png";
    }
}

但是我在如何在iOS中使用这个转换器时遇到了麻烦,我刚刚找到了使用ImageURL的示例,我现在正在iOS中启动,所以我有一些愚蠢的问题,如何将图像与此转换器绑定在哪里我应该把图像放在Touch项目中吗?它在Resource / Images / * .png?

在此致谢谢, 加布里埃尔


修改

嗯,我做了什么,试图解决它是: 我在Droid和iOS中作为参数传递了一个数字,所以在转换器中我做了:

protected override string Convert (int value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        var assetName = ((AppConstants.Type)value).ToString ().ToLower ();
        switch(int)
                    {
                    case 0://Droid
                        return "Images/" + assetName + ".png";
                    case 1://Touch
                        return "res:Images/" + assetName + ".png";
                    default:
                        return "";
    }

在我的触摸表查看单元格中,我有:

        var imageViewLoader = new MvxImageViewLoader (() => historicTypeImageView);
        Opaque = true;
        this.DelayBind(() => {
            var set = this.CreateBindingSet<HistoricCell, Historic>();
            set.Bind(imageViewLoader).For(i => i.DefaultImagePath).To(historic => historic.UpdateType).WithConversion("HistoricTypeToSource", 2);
            set.Apply();
        }

现在,问题是:我发现它只适用于第一个单元格,而不是所有单元格,例如,它复制了出现在所有单元格中的第一个imageViews,而不是为每个类型绑定每个单元格的图像...

我在输出中看到,我正在收到:

2014-04-18 14:40:45.902 MyProjectTouch[23081:70b] MvxBind:Warning: 30.59 Weak Target is null in MvxWithEventPropertyInfoTargetBinding - skipping set

可能,正是由于这个弱目标,它正在跳过其他细胞的绑定......我正在寻找答案,但还没有找到。实际上发现了这个this,但不确定它能解决我的问题..

请有人帮助我!

1 个答案:

答案 0 :(得分:3)

解决方案正是斯图尔特在这里所建议的:

  

尝试将MvxImageViewLoader成为单元格的成员变量 - 否则它将超出范围并收集垃圾

这也是MVVM Cross教程的一部分,其中演示者在实时编码时遇到同样的问题并解释它的原因相同:https://www.youtube.com/watch?v=iFEE355587k#t=1443