Marcelo C Fernandes Marcelo C Fernandes - 2 months ago 23
C# Question

Show a Image on Xamarin from byte[]

I saw many examples here and I am trying to adapt to my code! But, when the image appears, it comes blank...
I just want to show the image after the button click. Is not to save on the smartphone.

The .cs code:

ApiCall apiCallFoto = new ApiCall();
ImageSource imagem = null;

btnFoto.Clicked += async (sender, e) =>
{
await apiCallFoto.GetFoto<byte[]>("Nomes", "Foto", envolvID).ContinueWith(t =>
{
//Aqui verificamos se houve problema ne requisição
if (t.IsFaulted)
{
Debug.WriteLine(t.Exception.Message);
Device.BeginInvokeOnMainThread(() =>
{
DisplayAlert("Falha", "Ocorreu um erro na Requisição :(", "Ok");
});
}
//Aqui verificamos se a requisição foi cancelada por algum Motivo
else if (t.IsCanceled)
{
Debug.WriteLine("Requisição cancelada");

Device.BeginInvokeOnMainThread(() =>
{
DisplayAlert("Cancela", "Requisição Cancelada :O", "Ok");
});
}

//Caso a requisição ocorra sem problemas, cairemos aqui
else
{
//Se Chegarmos aqui, está tudo ok, agora itemos tratar nossa Lista
Device.BeginInvokeOnMainThread(() =>
{
byte[] fotoBytes = t.Result;
// Image image = new Image();
imagem = ImageSource.FromStream(() => new MemoryStream(fotoBytes));

Navigation.PushAsync(new FotoEnvolvido(imagem));

});

}
});
};


The FotoEnvolvido.cs :

public partial class FotoEnvolvido : ContentPage
{
private ImageSource imagem;

public FotoEnvolvido(ImageSource imagem)
{
InitializeComponent();
this.imagem = imagem;
BindingContext = imagem;

}
}


The FotoEnvolvido.xaml :

<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="100"/>
</Grid.RowDefinitions>
<Image Source="{Binding imagem}" x:Name="fotoperfil"/>

</Grid>

Answer

Your BindingContext needs to be this or you have to bind to .

public partial class FotoEnvolvido : ContentPage
{
    public ImageSource Imagem {get; set; }

    public FotoEnvolvido(ImageSource imagem)
    {
        InitializeComponent();
        Imagem = imagem;
        BindingContext = this;
    }
}

<Image Source="{Binding Imagem}" x:Name="fotoperfil"/>

or

public partial class FotoEnvolvido : ContentPage
{
    public FotoEnvolvido(ImageSource imagem)
    {
        InitializeComponent();
        BindingContext = imagem;
    }
}

<Image Source="{Binding}" x:Name="fotoperfil"/>