gpt4 book ai didi

android - mvvmcross 图片资源加载扩展需求

转载 作者:行者123 更新时间:2023-11-28 22:06:26 25 4
gpt4 key购买 nike

我正在使用 MvxImage 小部件(axml 中的 Android)和 UIImage + MvxImageLoader(iOS)使用 resourceLoader 插件从本地资源动态加载 UI 图像。这些绑定(bind)到 View 模型中的字符串,指示要加载的图像。绑定(bind)工作正常。 Viewmodel 图像名称字符串使用 res: 前缀使其工作。

在绑定(bind)字符串中省略文件扩展名 (.png) 时,这在 Android 上工作正常,但在添加 .png 或 .jpg 时找不到资源。

示例 axml:

<Mvx.MvxImageView
local:MvxBind="ImageUrl ImgWifiStatus"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/imageView1"
android:scaleType="fitEnd"
android:layout_marginBottom="5dp"
android:layout_marginLeft="5dp"
android:layout_marginTop="5dp"
android:layout_marginRight="5dp" />

在 iOS 上恰恰相反。在绑定(bind)字符串中没有 .png 扩展名的情况下,在资源中找不到图像。

_wifiImgViewLoader = new MvxImageViewLoader(() => this.wifiImg);
set.Bind(_wifiImgViewLoader).To(vm => vm.ImgWifiStatus);

有没有一种方法可以在 2 个平台上以类似的方式进行这项工作,或者我是否必须在 iOS 上使用值转换器将扩展名添加到没有扩展名的绑定(bind)文件名字符串中。

谢谢

编辑

这是成功的值转换器。相当直截了当。我同时使用它来制作所有小写文件名,并允许在如何指定所需扩展名方面具有一定的灵 active 。

public class AddFileExtensionValueConverter : MvxValueConverter<string, string>
{
protected override string Convert(string value, Type targetType, object parameter, CultureInfo culture)
{
value = value ?? "";
parameter = parameter ?? "";
switch ((string) parameter)
{
case "PNG":
case "png":
case ".PNG":
case ".png":
return value.ToLower() + ".png";
break;
case "JPG":
case "jpg":
case ".jpg":
case ".JPG":
return value.ToLower() + ".jpg";
break;
case "GIF":
case "gif":
case ".gig":
case ".GIF":
return value.ToLower() + ".gif";
break;
}
return value.ToLower();
}
}

最佳答案

我认为没有办法解决这个问题 =/。当前的解决方案是使用 ValueConverters。这里有一个带有转换器的类似帖子:How to bind imageSource to ImageView in MvvmCross

希望对您有所帮助 =)

关于android - mvvmcross 图片资源加载扩展需求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23870045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com