我如何在视图模型上访问媒体文件并在内容页面上使用它



我正在尝试从选择图片时从中获取基础图像数据。使用摄像头和选择图片的功能本身可以很好地工作,我只缺少一件事,那就是获取图像数据。Imagedata位于我想的返回的媒体文件中,但我不确定如何在ContentPage上与之达到。

(我使用此项目:https://github.com/xlabs/xamarin-forms-labs/wiki/camera)

这个想法是将Imagedata发送到ContentPage的数据库。

这是名为" cameraviewModel"的ViewModel:

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

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

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

最新更新