1
resposta

Variaveis criada dentro do <ViewCell.View> não aparecem no code behind

No codigo abaixo tenho o ListView criado e dentro dele possuo o ViewCell.

Esta acontecendo que as váriaveis criadas dentro do elemento <ViewCell.View> Não aparecem disponiveís no C#. Já dei clean na solution, já rebuildei !!! Simplesmente não aparece.

<ListView x:Name="LstProdutos" ItemsSource="{Binding Produto}"  Margin="5"  >
                <ListView.ItemTemplate >
                    <DataTemplate >                       
                        <ViewCell >
                            <ViewCell.View>
                                <StackLayout Orientation="Horizontal" Padding="1" Margin="0,3" >
                                    <!--Imagem do Produto-->
                                    <StackLayout Orientation="Vertical">
                                        <Image Source="{Binding LocalImagemProduto, Mode=TwoWay}" Aspect="AspectFit" WidthRequest="15" Margin="0,0,15,0" />
                                    </StackLayout>

                                    <!--Nome e valor do Produto-->
                                    <StackLayout Orientation="Vertical"  WidthRequest="80" >
                                        <Label Text="{Binding NomeProduto}" FontSize="11" VerticalTextAlignment="Center" TextColor="#006699"></Label>
                                        <Label Text="{Binding ValorProduto, StringFormat='R$ {0}'}" FontSize="9" FontAttributes="Bold" VerticalTextAlignment="Center"  TextColor="#f78f2b"></Label>


                                    </StackLayout>                                 

                                    <StackLayout  WidthRequest="50" BackgroundColor="Aquamarine">
                                        <Button x:Name="BtnMenos" Text="-" FontSize="Medium" WidthRequest="50" Clicked="BtnMenos_Clicked" ></Button>                                        
                                    </StackLayout>
                                    <StackLayout WidthRequest="50" >
                                        <Button x:Name="BtnMais" Text="+" FontSize="Medium" WidthRequest="50" Clicked="BtnMais_Clicked"></Button>
                                    </StackLayout>

                                    <StackLayout Orientation="Vertical" WidthRequest="80" BackgroundColor="SeaGreen">
                                        <Label x:Name="txtquantidade" Text="{Binding SomaValores}" FontSize="12" VerticalTextAlignment="Center"  />
                                        <Label x:Name="txtvalor"  FontSize="12" VerticalTextAlignment="Center"  />
                                    </StackLayout>


                                </StackLayout>

                            </ViewCell.View>

                        </ViewCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>

        public string SomaValores
        {
            get
            {
        //Aqui o BtnMais aparece com erro, não ficando disponivel para acessar suas propriedades e métodos.
                BtnMais.Clicked += Somar;


            }

        }

       private void Somar(object sender, EventArgs args)
        {

        }
1 resposta

Oi Alan, tudo bem?

A propriedade que fornece a lista de produtos está correta? Ela se chama Produto? Não é Produtos?

<ListView x:Name="LstProdutos" ItemsSource="{Binding Produto}"  Margin="5"  >
                <ListView.ItemTemplate >

Outra coisa: remova o nome dos botões. Como você tem uma ListView, os botões vão se repetir, então não faz sentido nomeá-los.

<Button x:Name="BtnMais" ...

Além disso, crie uma classe para o argumento do clique, e programe o método do evento para obter o produto clicado:

public class ProdutoClicadoEventArgs : EventArgs
{
    public Produto Item { get; set; }
    public ProdutoClicadoEventArgs(Produto item)
    {
        this.Item = item;
    }
}

public void BtnMais_Clicked(Object sender, ProdutoClicadoEventArgs args)
{
    var item = args.Item;
    if (item != null)
    {
        Debug.WriteLine("Produto: " + item.NomeProduto);
    }
}