如何在我的viewmodel上访问mediaFile并在我的内容页面上使用它?

时间:2016-06-21 13:53:20

标签: c# xamarin xamarin.forms

我正在尝试从您选择图片时获取基础图像数据。功能本身与cameraalbum和选择图片完美地工作,我只缺少一件事,那就是获取图像数据。 imagedata在我假设的返回的mediaFile中,但我不确定如何在我的contentPage上访问它。

(我使用这个项目:https://github.com/XLabs/Xamarin-Forms-Labs/wiki/Camera

我们的想法是将imagedata发送到内容页面上的数据库。

这是名为" CameraViewModel":

的视图模型
public async Task SelectPicture()
    {
        Setup ();

        ImageSource = null;

        try
        {
            var mediaFile = await _Mediapicker.SelectPhotoAsync(new CameraMediaStorageOptions
                {
                    DefaultCamera = CameraDevice.Front,
                    MaxPixelDimension = 400
                });

            VideoInfo = mediaFile.Path;
            ImageSource = ImageSource.FromStream(() => mediaFile.Source);


        }
        catch (System.Exception ex)
        {
            Status = ex.Message;

        }
    }

现在我的内容页面上有这个:

CameraViewModel cameraOps = null;

    public PhotoPage ()
    {
        InitializeComponent ();

        cameraOps = new CameraViewModel ();
        cameraOps. //trying to reach the mediafile here 
    }

更新的代码:

private MediaFile _file;
    public MediaFile File
    {
        get { return _file; }
        set
        {
            _file = value;
        }
    }

public async Task SelectPicture()
    {
        Setup ();

        ImageSource = null;

        try
        {
            File = await _Mediapicker.SelectPhotoAsync(new CameraMediaStorageOptions
                {
                    DefaultCamera = CameraDevice.Front,
                    MaxPixelDimension = 400
                });

            VideoInfo = File.Path;
            ImageSource = ImageSource.FromStream(() => File.Source);


        }
        catch (System.Exception ex)
        {
            Status = ex.Message;

        }
    }

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {

        File = value as MediaFile;
        return ImageSource.FromStream(() => File.Source);
    }

1 个答案:

答案 0 :(得分:3)

您可以在视图模型上创建属性:

    private MediaFile _file;
    public MediaFile File
    {
        get { return _file; }
        set
        {
            _file = value;
            OnPropertyChanged();
        }
    }

然后将其绑定到ContentPage

<Image Source="{Binding File}, Converter={StaticResource MediaFileToImageSourceConverter}">

转换器:

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
         var file = value as MediaFile;
         return ImageSource.FromStream(() => file.GetStream()));
    }

更新代码:(不是mvvm的最佳传统,但适用于您的样本)

    public async Task<MediaFile> SelectPicture()
    {
        Setup();

        MediaFile file = null;

        try
        {
            file = await _Mediapicker.SelectPhotoAsync(new CameraMediaStorageOptions
            {
                DefaultCamera = CameraDevice.Front,
                MaxPixelDimension = 400
            });

        }
        catch (System.Exception ex)
        {
            Status = ex.Message;
        }

        return file;
    }

关于代码背后:

    public async void OnTakePhotoButtonClicked(object sender, EventArgs args)
    {
        var file = await cameraOps.SelectPicture();
        someImage.ImageSource = ImageSource.FromStream(() => file.Source);
    }