Search code examples
c#xamldata-bindinglistboxwindows-phone

How binding my ListBox correctly


My Windows Phone app, have a ListBox populated from a collection produtos. This collection received values from a JSON.

In my ListBox, I "binding" all values from JSON (quantidade, descricao, valor_preco_a, codigo), and a another value (unidade) that it should be produtos.quantidade * produtos.valor_preco_a.

My ListBox:

        <controls:PivotItem Header="Consulta" Name="consultaCartao">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="Auto" />
                </Grid.ColumnDefinitions>
                <ListBox Name="List2" ItemsSource="{Binding produtosCartao}" HorizontalContentAlignment="Stretch" Grid.ColumnSpan="3" Margin="0,182,-66,0" Visibility="Collapsed">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Margin="0,0,0,17" Width="432" Height="Auto">
                                <StackPanel.Background>
                                    <SolidColorBrush Color="#FFE8FF00" Opacity="0.2"/>
                                </StackPanel.Background>
                                <TextBlock Grid.Column="0" Text="{Binding descricao}" TextWrapping="Wrap" Style="{StaticResource PhoneTextNormalStyle}"/>
                                <TextBlock Grid.Column="3" TextWrapping="Wrap" Style="{StaticResource PhoneTextSubtleStyle}" Margin="20,5,12,0">
                                    <Run Text="{Binding quantidade}" />
                                    <Run Text="{Binding unidade}" />
                                </TextBlock>
                                <TextBlock Grid.Column="3" Text="{Binding valor, ConverterCulture=pt-BR, StringFormat=C2}" TextWrapping="Wrap" Style="{StaticResource PhoneTextNormalStyle}" Margin="300,-30,12,0"/>
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>

I trying with this code:

public ObservableCollection<produtos> produtosCartao { get; set; }

    public class produtos
    {

        public double quantidade { get; set; }
        public string descricao { get; set; }
        public double valor_preco_a { get; set; }
        public string codigo { get; set; }
        public string unidade { get; set; }
        public double valor { get; set; }
    }

void webClient_DownloadStringCompletedProdutos(object sender, DownloadStringCompletedEventArgs e)
    {
      produtos produto = new produtos();
      produto.valor = produto.valor_preco_a * produto.quantidade;
    }

Solution

  • In order to use data binding en XAML, you have to set your DataContext property in your listbox.

    DataContext property is an object where the xaml engine looks in order to find values that are binded.

    You should take a look to this