Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Binding de Image

Fiz um Binding de uma imagem padrão, mas quando entro na tela a imagem não aparece. Segue abaixo a forma como defini o XAML e o código. Se ao inves do Binding colocar no Source o nome da imagem (camera.png) a mesma aparece.

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:codigo="clr-namespace:Moshi.Codigo"
             Title="Menu Imóvel"
             x:Class="Moshi.Telas.TelaMenuImovel">
    <ContentPage.BindingContext>
        <codigo:MenuImovel></codigo:MenuImovel>
    </ContentPage.BindingContext>
    <ScrollView>
        <Grid RowSpacing="0" ColumnSpacing="0" 
              HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"  Margin="20">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="50" />
                <ColumnDefinition Width="10" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>

            <Grid.RowDefinitions>
                <RowDefinition Height="50" />
                <RowDefinition Height="10" />
                <RowDefinition Height="50" />
                <RowDefinition Height="10" />
                <RowDefinition Height="50" />
                <RowDefinition Height="10" />
                <RowDefinition Height="50" />
                <RowDefinition Height="10" />
                <RowDefinition Height="50" />
                <RowDefinition Height="10" />
                <RowDefinition Height="50" />
            </Grid.RowDefinitions>

            <Image Source="{Binding fotoVendedor}"    Grid.Column="0" Grid.Row="0" />
            <Label  Text=" "              Grid.Column="1" Grid.Row="0" />
            <Button Text="Vendedor"       Grid.Column="2" Grid.Row="0" />

            <Image Source="{Binding fotoComprador}"    Grid.Column="0" Grid.Row="2" />
            <Label  Text=" "              Grid.Column="1" Grid.Row="2" />
            <Button Text="Comprador"      Grid.Column="2" Grid.Row="2" />

            <Image Source="{Binding fotoGrupo}"    Grid.Column="0" Grid.Row="4" />
            <Label  Text=" "              Grid.Column="1" Grid.Row="4" />
            <Button Text="Grupo"          Grid.Column="2" Grid.Row="4" />

            <Image Source="documento.png" Grid.Column="0" Grid.Row="6" />
            <Label  Text=" "              Grid.Column="1" Grid.Row="6" />
            <Button Text="Comprador"   Grid.Column="2" Grid.Row="6" Clicked="btDadosImovel" />

            <Image Source="gps.png"       Grid.Column="0" Grid.Row="8" />
            <Label  Text=" "              Grid.Column="1" Grid.Row="8" />
            <Button Text="Localização"    Grid.Column="2" Grid.Row="8" Clicked="btGps" />

        </Grid>
    </ScrollView>
</ContentPage>
using System;
using System.Collections.Generic;
using System.Text;
using Xamarin.Forms;

namespace Moshi.Codigo
{
    class MenuImovel
    {   
        private ImageSource fotoVendedor = "camera.png";
        public ImageSource FotoVendedor
        {
            get { return fotoVendedor; }
            private set { fotoVendedor = value; }
        }

        private ImageSource fotoComprador = "camera.png";
        public ImageSource FotoComprador
        {
            get { return fotoComprador; }
            private set { fotoComprador = value; }
        }

        private ImageSource fotoGrupo = "camera.png";
        public ImageSource FotoGrupo
        {
            get { return fotoGrupo; }
            private set { fotoGrupo = value; }
        }

    }

}
2 respostas

É que o Binding você fez com a variável e não com a propriedade. A propriedade começa com letra maiúscula e a variável com a letra minúscula. Nesses casos, geralmente usa-se underline nas variáveis de classe.

Exemplo

<Image Source="{Binding FotoVendedor}"    Grid.Column="0" Grid.Row="0" />

Note que está sendo usada a propriedade.

        private ImageSource _fotoVendedor = "camera.png";
        public ImageSource FotoVendedor
        {
            get { return _fotoVendedor; }
            private set { _fotoVendedor = value; }
        }

Nesse caso, a variável começa com underline.

:)

solução!

Ok, coloquei a letra maiuscula e funcionou. Obrigado