1

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); }
}

それは今動作します。問題は、ビューモデルのバインド時間を誤解していたことです

4

1 に答える 1