MvxImageView,无法将ImageUrl绑定到本地资源

时间:2014-01-05 23:03:34

标签: xamarin.android mvvmcross

我正在使用MvvmCross 3.0.14和Xamarin.Android。

我有一个MvxImageView,如果我使用android:src直接指定图像(没有绑定),我可以显示特定的本地图形资源:

<Mvx.MvxImageView
  android:layout_width="100dp"
  android:layout_height="75dip"
  android:layout_weight="1"
  android:src="@drawable/Card_kh"/>

但我无法使用local显示相同的图像:MvxBind:

<Mvx.MvxImageView
  android:layout_width="100dp"
  android:layout_height="75dip"
  android:layout_weight="1"
  local:MvxBind="ImageUrl 'res:Card_kh'"/>

这不起作用。 MvxAndroidLocalFileImageLoader.LoadResourceBitmap记录一条跟踪消息,指示'Card_kh'不是已知的可绘制名称。令人鼓舞的是它达到了这么远 - 至少我知道这些信息的预期消费者确实得到了它。但显然我没有以正确的格式提供这些信息。

更进一步,我的目标是让我的ViewModel确定应该使用哪种资源,例如。

class MyViewModel : MvxViewModel
{
  public string SomeImagePath { get { return "res:Card_kh"; } }
}

<Mvx.MvxImageView
  android:layout_width="100dp"
  android:layout_height="75dip"
  android:layout_weight="1"
  local:MvxBind="ImageUrl SomeImagePath"/>

将MvxImageView绑定到视图模型确定的本地资源图像需要做什么?

2 个答案:

答案 0 :(得分:8)

问题只是资源名称中的大写。虽然图像文件名以大写字母C开头,而android:src属性使用大写字母C,但ImageUrl的MvxBind需要小写c:

<Mvx.MvxImageView
  android:layout_width="100dp"
  android:layout_height="75dip"
  android:layout_weight="1"
  local:MvxBind="ImageUrl 'res:card_kh'"/>

当ImageUrl值的源是viewmodel属性时,这也解决了这个问题:

class MyViewModel : MvxViewModel
{
  public string SomeImagePath { get { return "res:card_kh"; } }
}

<Mvx.MvxImageView
  android:layout_width="100dp"
  android:layout_height="75dip"
  android:layout_weight="1"
  local:MvxBind="ImageUrl SomeImagePath"/>

答案 1 :(得分:1)

自MVVMCross v6.0.0以来,之前的答案已不再适用。

如此处所述https://www.mvvmcross.com/documentation/upgrading/upgrade-to-mvvmcross-60 MvxImageView已从API中删除。

最新的替代方案现在是https://github.com/luberda-molinet/FFImageLoading/wiki/MvvmCross

这个nuget包&#34; Xamarin.FFImageLoading&#34;必须添加以使下面的代码工作。

<ffimageloading.cross.MvxCachedImageView
  android:layout_width="100dp"
  android:layout_height="75dip"
  android:layout_weight="1"
  local:MvxBind="ImagePath SomeImagePath"/>