【问题标题】:MvxImageView, can't bind ImageUrl to local resourceMvxImageView,无法将 ImageUrl 绑定到本地资源
【发布时间】:2018-05-24 22:41:37
【问题描述】:

我将 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 绑定到视图模型确定的本地资源图像?

【问题讨论】:

    标签: xamarin.android mvvmcross


    【解决方案1】:

    问题只是资源名称中的大写。虽然图像文件名以大写 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"/>
    

    【讨论】:

      【解决方案2】:

      自 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 包“Xamarin.FFImageLoading”才能使下面的代码工作。

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

      【讨论】:

        猜你喜欢
        • 2021-04-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多