1
resposta

BindingContext não funciona

Não consigo fazer o bind dos veículos pelo bindingcontext, sendo obrigado a definir o ItemsSource da minha listView. Onde está o errro? Segue código abaixo:

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

class Veiculo
    {
        public string Nome { get; set; }
        public Decimal Preco { get; set; }
        public String PrecoFormatado {
            get { return string.Format("R$ {0}", Preco); }
            set { }
        }
    }
    public partial class MainPage : ContentPage
    {
        private 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;
          // Tenho que descomentar a linha abaixo para funcionar.
          // lsvVeiculos.ItemsSource = this.Veiculos;
        }

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

            DisplayAlert(veiculo.Nome, veiculo.PrecoFormatado, "Cancelar");
        }

    }
1 resposta

Olá, Walter!

Dei uma olhada no seu código e aparentemente está ok. Às vezes perdemos tempo tentando descobrir um problema, quando na verdade estamos rodando uma versão anterior do aplicativo.

Então sempre que sentir que algo "deveria funcionar" mas não funciona, faça o seguinte:

  • Clique com botão direito na solução e escolha no menu "Clean Solution"
  • Vá no emulador e jogue o programa instalado (TestDrive) na lixeira.

Se não resolver, precisamos de mais informações:

  • Dá algum erro, ou é um problema silencioso?
  • A listagem aparece sem nenhum item, ou aparece com 3 itens vazios?

Boa sorte e bons estudos!