imageview をローカルの画像ファイルにバインドしようとしています。Androidでは、 setImageUrl を使用して、リソースフォルダー外のファイルから画像を設定できます。N+1 の子猫の例を読み、プロジェクトの Web URL の代わりにファイル URL を使用しようとしました。画像ビューのレイアウト
<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"));
次に、同じパスとファイル名を使用してコンバーターの FileUrl を設定します
ImageConverter.FileDir = FilesDir.Path;
ViewModel で
_messageImage = "image.png";
private string _messageImage;
public string MessageImage
{
get { return _messageImage; }
set { _messageImage = value; RaisePropertyChanged(() => MessageImage); }
}
それは今動作します。問題は、ビューモデルのバインド時間を誤解していたことです