2013-07-30 61 views
1

我尝试将imageview与本地图像文件绑定。在android中,我可以使用setImageUrl从资源文件夹外的文件设置图像。我读了N + 1小猫的例子,并尝试使用文件的URL而不是我的项目的网址。 图像视图Mvvmcross将文件url绑定到imageview

<Mvx.MvxImageView 
android:id="@+id/advisor_message_picture" 
android:layout_width="64dp" 
android:layout_height="64dp" 
android:layout_marginLeft="8dp" 
android:layout_alignParentRight="true" 
local:MvxBind="ImageUrl MessageImage, Converter = Image" /> 

转换器使用加入文件名和文件目录URL的布局。 Android的视图文件将设置FILEDIR

public class ImageConverter : MvxValueConverter<string, string> 
{ 
    public static string FileDir; 
    protected override string Convert(string value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return FileDir + "/" + value; 
    } 
} 

更新答案后

我第一次复制或下载到文件的Context.FilesDir.Path与SetImageUrl,图像显示了检查。

view.FindViewById<ImageView>(Resource.Id.advisor_message_picture).SetImageURI(new FileService(_context).CopyFileFromAssetsToStorage("image.png")); 

然后我使用相同的路径和文件名

ImageConverter.FileDir = FilesDir.Path; 

设置指定fileurl转换器在视图模型

_messageImage = "image.png"; 
private string _messageImage; 
public string MessageImage 
{ 
    get { return _messageImage; } 
    set { _messageImage = value; RaisePropertyChanged(() => MessageImage); } 
} 

它现在。问题是我误解了视图模型的绑定时间

回答

1

对于Asset的,您可以使用ResourceLoader插件使用AssetImagePath进行绑定。然而,由于粘性手指编辑错误,这一习俗结合当前确实需要添加到您的设置 - 见https://github.com/slodge/MvvmCross/issues/372的错误信息

对于文件使用该文件的插件存储(默认为Context.FilesDir.Path - 见https://github.com/slodge/MvvmCross/blob/v3/Plugins/Cirrious/File/Cirrious.MvvmCross.Plugins.File.Droid/MvxAndroidFileStore.cs#L39),你可以直接使用路径。

对于存储在您的应用程序中确定的某些自定义FileDir中的文件,您需要提供一个相对于Context.FilesDir.Path的路径,以便插件加载它。

为了进一步调试,您可以添加断点或跟踪到https://github.com/slodge/MvvmCross/blob/v3/Plugins/Cirrious/DownloadCache/Cirrious.MvvmCross.Plugins.DownloadCache.Droid/MvxAndroidLocalFileImageLoader.cs#L28 - 或者您可以构建并注册您自己的IMvxLocalFileImageLoader<Bitmap>实现,以了解您的文件路径。