我正在使用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绑定到视图模型确定的本地资源图像需要做什么?
答案 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"/>