MvvmCross 4.1 - MvxImageViewLoader无法正常工作

时间:2016-03-28 04:00:00

标签: xamarin xamarin.ios mvvmcross

我开始了一个新的Xamarin.iOS项目,但是我无法让MvxImageViewLoader工作。我添加了最新的DownloadCache,File和Json插件(版本4.1)并在我的安装文件中配置它们:

protected override void AddPluginsLoaders (MvxLoaderPluginRegistry registry)
{
    registry.AddConventionalPlugin<MvvmCross.Plugins.DownloadCache.iOS.Plugin>();
    registry.AddConventionalPlugin<MvvmCross.Plugins.File.iOS.Plugin>();

    base.AddPluginsLoaders (registry);
}

protected override void InitializeLastChance ()
{   
    MvvmCross.Plugins.DownloadCache.PluginLoader.Instance.EnsureLoaded();
    MvvmCross.Plugins.File.PluginLoader.Instance.EnsureLoaded();
    MvvmCross.Plugins.Json.PluginLoader.Instance.EnsureLoaded();

    base.InitializeLastChance ();
}

在自定义MvxTableViewCell中,我正在尝试绑定图像:

public partial class MyTableViewCell : MvxTableViewCell
{
    public static readonly NSString Key = new NSString ("MyTableViewCell");
    public static readonly UINib Nib;

    private readonly MvxImageViewLoader _imageViewLoader;

    static MyTableViewCell ()
    {
        Nib = UINib.FromName ("MyTableViewCell", NSBundle.MainBundle);
    }

    public MyTableViewCell (IntPtr handle) : base (handle)
    {
        _imageViewLoader = new MvxImageViewLoader(() => imgLarge);

        this.DelayBind (() => {
            var set = this.CreateBindingSet<MyTableViewCell, MyViewModel>();                
            set.Bind (_imageViewLoader).To (vm => vm.ImageUrlLarge);
            set.Apply();
        }); 
    }
}

应用程序输出中的相关错误:

mvx: Diagnostic: 366.64 failed to download image http://3.bp.blogspot.com/-2-9DK3D-bo8/T-g6U58ZU_I/AAAAAAAADpQ/NKEmG72Hl0I/s1600/Funny_Hamster_04.jpg : TypeLoadException: Could not load type 'MvxImageCache`1' from assembly ‘…/MvvmCross.Plugins.DownloadCache.dll'.
.....
at MvvmCross.Plugins.DownloadCache.MvxDynamicImageHelper`1+<RequestImageAsync>d__29[T].MoveNext () [0x001a7] in C:\vcs\git\MvvmCross-Plugins\DownloadCache\MvvmCross.Plugins.DownloadCache\MvxDynamicImageHelper.cs:135 

查看该行的错误和源代码,似乎DownloadCache插件无法解析ImageCache:

var cache = Mvx.Resolve<IMvxImageCache<T>>();

我没有注册我应该注册的内容吗?这可能是最新版本的错误吗?我在网上看到的所有教程,问题等都是针对3.X版本的。有没有人让DownloadCache插件与4.X一起使用?

更新 我创建了一个新的MvvmCross解决方案来展示这个问题。你可以在这里重现这个问题: https://github.com/ogoldfinger/MvvmCrossDownloadCacheTest

1 个答案:

答案 0 :(得分:4)

手动安装此Nuget:System.Collections.Immutable

这是DownloadCache插件的问题,缺少对System.Collections.Immutable的依赖。请参阅:https://github.com/MvvmCross/MvvmCross-Plugins/issues/78

问题已经解决,所以我们在下次更新DownloadCache包时不需要这样做。