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

Problemas com ItemTapped

Estou com problemas ao gerar o display com a mensagem que o veiculo foi tocado. Aparecendo a seguinte mensagem:

Xamarin.Forms.Xaml.XamlParseException: Position 8:12. No method listViewVeiculos_ItemTapped found on type App1.MainPage

Meu xml está assim:

<?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:local="clr-namespace:App1"
             x:Class="App1.MainPage">

  <ListView x:Name="listViewVeiculos" ItemsSource="{Binding Veiculos}" Margin="25" ItemTapped="listViewVeiculos_ItemTapped">
    <ListView.ItemTemplate>
      <DataTemplate>
        <ViewCell>
          <ViewCell.View>
            <StackLayout Orientation="Horizontal">
              <Label Text ="{Binding Nome}" FontSize="20" VerticalTextAlignment="Center"></Label>
              <Label Text =" - " VerticalTextAlignment="Center"></Label>
              <Label Text ="{Binding PrecoFormatado}" FontAttributes="Bold" VerticalTextAlignment="Center"></Label>
            </StackLayout>
          </ViewCell.View>
        </ViewCell>
      </DataTemplate>
    </ListView.ItemTemplate>
  </ListView>

</ContentPage>

E minha classe está assim:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;

namespace App1
{

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

    public partial class MainPage : ContentPage
    {

        public List<Veiculo> Veiculos { get; set; }

        public MainPage()
        {
            InitializeComponent();

            this.Veiculos = new List<Veiculo>
            {
                new Veiculo {Nome = "Azera V6", Preco = 60000 },
                new Veiculo {Nome = "Fiesta 2.0", Preco = 50000 },
                new Veiculo {Nome = "HB20 S", Preco = 40000 }
            };

            this.BindingContext = this;
        }

        private void listViewVeiculos_ItemTapped(object sender, ItemTappedEventArgs e)
        {
            var veiculo = (Veiculo)e.Item;

            DisplayAlert("Test Drive", string.Format("Você tocou no modelo '{0}', que custa {1}", veiculo.Nome, veiculo.PrecoFormatado), "ok");
        }

    }
}
3 respostas
solução!

Olá, Daniel!

Primeiro, verifique se, quando você coloca um breakpoint na aplicação, o programa está parando ou não naquele ponto de parada. Se o breakpoint não funcionar, é um sintoma do problema que vou explicar abaixo.

O erro está acusando que não existe um método listViewVeiculos_ItemTapped na sua classe MainPage, mas pelo código que você postou, o método está lá! Então, é possível que a versão do aplicativo que você está debugando no emulador (ou no seu celular) esteja diferente da versão do projeto. Então siga estes passos:

  1. Clique com botão direito na solução, "Clear Solution"
  2. Vá no emulador (ou no celular) pressione o ícone do app, jogue na lixeira para excluir.
  3. Compile, rode a aplicação novamente.

Isso acontece comigo às vezes. Quando vejo que tudo que fiz parece estar certo, mas na verdade a versão que estou debugando do emulador está diferente da versão que está no meu projeto.

Espero que ajude. Obrigado por prestigiar nosso curso!

Boa sorte e bons estudos

Exatamente Marcelo, estava rodando a versão anterior.

Fiz seu passo-a-passo e o programa rodou corretamente. Me lembrarei dessas instruções futuramente.

Muito obrigado pela atenção.

Excelente! Nós que agradecemos, Daniel!