2015-02-08 2 views
0

У меня есть вид изображения У меня проблемы с настройкой источника. Я использую кнопку для выполнения TakePictureCommand, которая вызывает метод TakePicture() (показано ниже), который, в свою очередь, устанавливает мой источник «ImageSource». Отладка метода показывает, что изображение входит, но я никогда не вижу его в пользовательском интерфейсе.Установить источник изображения по возвращении из галереи/камеры?

не может быть установлен в связывании для изображения должным образом, это то, что у меня есть:

Image avatar = new Image(); 
avatar.Source = ImageSource; 

Button setImageBtn = new Button{ Text = "Photo" }; 
setImageBtn.Clicked += async (sender, e) => 
{ 
    string action = await DisplayActionSheet(
      "Event Photo", "Cancel", null, OPTION_CAMERA, OPTION_GALLERY); 

    if(action == OPTION_CAMERA) { 
     TakePictureCommand.Execute(null); 
    } 

    else if(action == OPTION_GALLERY) { 
     SelectPictureCommand.Execute(null); 
    } 
}; 

TakePicture()

private async Task<MediaFile> TakePicture() 
{ 
    Setup(); 

    ImageSource = null; 

    return await _mediaPicker.TakePhotoAsync(
     new CameraMediaStorageOptions { 
      DefaultCamera = CameraDevice.Front, 
      MaxPixelDimension = 400 
    }).ContinueWith(t => 
    { 
     if (t.IsFaulted) 
     { 
      Status = t.Exception.InnerException.ToString(); 
     } 
     else if (t.IsCanceled) 
     { 
      Status = "Canceled"; 
     } 
     else 
     { 
      var mediaFile = t.Result; 

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

      return mediaFile; 
     } 

     return null; 
    }, _scheduler); 
} 

Что я здесь отсутствует?

+0

Потенциально связанные: http://stackoverflow.com/questions/25265686/xamarin-forms-resize-camera-picture –

+0

Может быть связаны, а также: http://stackoverflow.com/ д/28207571/3419103 – Falko

ответ

0

Ниже подход работает для меня:

Во-первых, в XAML я добавил вид изображения

<Image Source="{Binding ImageSource}" VerticalOptions="Fill" HorizontalOptions="Fill" 
        Aspect="AspectFit"/> 

Во-вторых, в ViewModel я добавил ImageSource свойство как это:

public ImageSource ImageSource 
{ 
    get { return _imageSource; } 
    set { this.SetProperty(ref _imageSource, value); } 
} 

В-третьих, в командном обработчике:

await TakePicture(); 

Forth, код метода TakePicture(), как вы писали. Мои настройки():

if (_mediaPicker != null) 
      return; 
var device = Resolver.Resolve<IDevice>(); 
_mediaPicker = DependencyService.Get<IMediaPicker>() ?? device.MediaPicker; 
Смежные вопросы