1
resposta

ImageCell com + 1 informação

Professor, criei um projeto com 3 colunas (imagem do carro; nome do carro; preço do carro), porém, as imagens não aparecem padronizadas (umas aparecem um pouco maiores que as outras), aí eu tentei com o image cell e funcionou (as imagens ficaram padronizadas), entretanto, ficou com sobra o canto direito e eu gostaria de colocar mais uma informação, como preço com desconto ...

Código Funcionando com 3 colunas:

public class TabelaDeVeiculos
    {
        public string Nome { get; set; }
        public double Preco { get; set; }
        public string Imagem { get; set; }
        public string PrecoFormatado
        {
            get { return string.Format("R$ {0}", Preco); }
        }
    }

    public partial class MainPage : ContentPage
    {

        public List<TabelaDeVeiculos> ListaDeVeiculos { get; set; }

        public MainPage()
        {
            InitializeComponent();

            this.ListaDeVeiculos = new List<TabelaDeVeiculos> {
                new TabelaDeVeiculos {Nome = "Corolla 1.8", Preco = 70000, Imagem = "Corolla.jpg"},
                new TabelaDeVeiculos {Nome = "Ford Ka 1.5", Preco = 50000, Imagem = "http://aglomeradodigital.com.br/wp-content/uploads/2016/01/novo-chevrolet-cruze-2017-hatchback.jpg" },
                new TabelaDeVeiculos {Nome = "Corsa 1.4", Preco = 35000, Imagem = "http://3.bp.blogspot.com/-7nkIJ41hGj0/Tl2Q8sXN9GI/AAAAAAAAG1Q/DfxadUUFwH8/s1600/Corsa-hatch-2010-preto-usado-flex.JPG" }
            };

            this.BindingContext = this;
        }
    }


<ListView x:Name="TabelaDeVeiculos" ItemsSource="{Binding ListaDeVeiculos}" Margin="10">
        <ListView.ItemTemplate>
            <DataTemplate>
                <ViewCell>
                    <ViewCell.View>
                        <Grid Padding="5">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition/>
                                <ColumnDefinition/>
                            </Grid.ColumnDefinitions>
                            <Image Source="{Binding Imagem}" HorizontalOptions="Start"/>
                            <Label Grid.Column="1" Text="{Binding Nome}"/>
                            <Label Grid.Column="2" Text="{Binding PrecoFormatado}"/>
                        </Grid>
                    </ViewCell.View>
                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

Código Funcionando com ImageCell

 <ListView x:Name="TabelaDeVeiculos" ItemsSource="{Binding ListaDeVeiculos}" Margin="10">
        <ListView.ItemTemplate>
            <DataTemplate>
                 <ImageCell Text="{Binding Nome}" Detail="{Binding PrecoFormatado}" ImageSource="{Binding Imagem}"/>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

Quero usar este recurso do Image Cell (Imagem / Título-com letra maior e Descrição em baixo do Título - com letra menor / preço), ou seja, 3 colunas. Tentei colocar um campo do lado direito (espaço que sobra na linha) com o stacklayout horizontal e tb com o grid (uma coluna o imagel cell e outra coluna o preço), mas deu erro. poderia me ajudar?

1 resposta

Olá, Marcelo!

Como você viu, o ImageCell é bem mais simples de suar, porém você perde o controle do layout (o espaço à direita, por exemplo). Você pode até tentar colocar esse ImageCell dentro de um Grid, porém não sei se vai funcionar, e também não recomendo.

O que você pode fazer é:

  • Não usar imagens de terceiros. Usar somente imagens do próprio projeto Xamarin (dentro do projeto Droid, dentro da pasta Resources/Drawable), e altere as imagens para terem a mesma largura/altura desejadas, ou
  • Use imagens de sites externos que tenham mesma largura/altura.

Assim, você vai garantir que a apresentação dentro do grid vai ficar padronizada e você pode ocupar os espaços dentro do grid como quiser.

Boa sorte e bons estudos!