locked
LongListSelector + Selected Item - Como ler o ID daquele registro? RRS feed

  • Pergunta

  • Olá pessoal, como vão?

    Tenho aqui uma LongListSelector, que é alimentada por informações que estão na minha base SQL do Windows Azure.

    Eis o meu código para ler estes registros:

     private async void RefreshTodoItemsHoje()
            {
                try
                {
                    items = await todoTable
                        .Where(todoItem => todoItem.TpEvt == "hoje")
                        .ToCollectionAsync();
                }
                catch (MobileServiceInvalidOperationException e)
                {
                    MessageBox.Show(e.Message, "Error loading items", MessageBoxButton.OK);
                }
    
                ListItemsHoje.ItemsSource = items;
            }

    E este é o meu XAML:

    <phone:LongListSelector Name="ListItemsHoje">
                        <phone:LongListSelector.ItemTemplate>
                            <DataTemplate>
                                <StackPanel>
    
                                        <TextBlock Name="TxtEvento" Text="{Binding Text}" TextWrapping="Wrap" Foreground="Gray" TextAlignment="Center" FontSize="30" Padding="30">
                                        </TextBlock>
                                    
                                <Line X1="0" Y1="10" X2="240" Y2="10" Stroke="SkyBlue" HorizontalAlignment="Center" VerticalAlignment="Center" Height="21"/>
                                </StackPanel>
                            </DataTemplate>
                        </phone:LongListSelector.ItemTemplate>
                        </phone:LongListSelector>

    Os registros são armazenados na minha LongListSelector normalmente.

    Agora a minha dúvida: como ler as propriedades de cada registro? Para cada um desses registros, tenho campos para "Id", "TipoEvento", "Hora", "Data", etc.

    Dessa forma, como posso ler cada um destes valores? Por exemplo, quero ver numa MessageBox o ID do Item Selecionado na LongListSelector. Como faço isso?

    Muito obrigado, pessoal.

    sábado, 7 de dezembro de 2013 20:52

Respostas

  • Rafael,

    Você precisa criar as classes de dados, atribuir ao Binding e depois fazer as referências. Vou te mostrar um exemplo simples:

    Código C# (criando classe)

            #region CLASSE DE CATEGORIAS
    
            public class ListaCategorias : List<clsListaCategoriasBinding>
            {
                public ListaCategorias()
                {
                    using (FingersOnFinanceContext ctx = new FingersOnFinanceContext(App.sConn))
                    {
                        var categoria = from x in ctx.FOFkCategoriaDespesas
                                        where x.CatStatus == 0
                                        orderby x.CatDescricao
                                        select x;
    
                        foreach (var item in categoria)
                        {
                            Add(new clsListaCategoriasBinding
                            {
                                categoriaCodigo = item.CatCodigo,
                                categoriaNome = item.CatDescricao,
                                categoriaTipo = item.CatTipo
                            });
                        }
                    }
                }
            }
            
    
            public class clsListaCategoriasBinding
            {
                public Int32 categoriaCodigo { get; set; }
                public String categoriaNome { get; set; }
                public String categoriaTipo { get; set; }
            }
            
            #endregion

    Código C# (populando a lista)

            private void CarregaListaCategorias()
            {
                this.lstCategoria.ItemsSource = new ListaCategorias();
            }
    

    Código XAML

                    <ListBox x:Name="lstCategoria" Tap="lstCategoria_Tap">
                        <ListBox.ItemTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding categoriaNome}" Style="{StaticResource PhoneTextTitle2Style}"></TextBlock>
                            </DataTemplate>
                        </ListBox.ItemTemplate>
                    </ListBox>
    

    Acessando qualquer dado da classe que não esteja visível na lista:

    pubCategoriaCodigo = ((clsListaCategoriasBinding)this.lstCategoria.SelectedItem).categoriaCodigo;

    Tome os cuidados para garantir que um dos itens da lista esteja realmente selecionado antes de tentar obter um valor da classe.

    Espero ter ajudado e se foi útil, por favor não esqueça de marcar como resposta para ajudar outros com a mesma dúvida.

    Abraço!


    Andrey Kurka (MCC) | Federal Case | @federalcaseinfo

    • Marcado como Resposta Giovani Cr sexta-feira, 13 de dezembro de 2013 18:59
    segunda-feira, 9 de dezembro de 2013 19:47