2013-07-30 91 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>實現,以瞭解您的文件路徑。