我正在尝试从您选择图片时获取基础图像数据。功能本身与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);
}
答案 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);
}