locked
Como obter o objeto passado na listbox quando usamos o evento Hold? RRS feed

  • Pergunta

  • Pessoal, tenho uma listbox com vários documentos e ao o usuário segurar com o dedo em cima do registro é disparado o evento hold, eu gostaria de conseguir pegar de alguma maneira o documento que o usuário selecionou.

     

    Segue abaixo meu código

    <ListBox Height="394" HorizontalAlignment="Left" Margin="0,368,0,0" Name="lbDocumento" VerticalAlignment="Top" Width="456" SelectionChanged="lbDocumento_SelectionChanged" Hold="lbDocumento_Hold">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal">
                                <StackPanel Margin="10" Width="382">
                                    <TextBlock Foreground="Blue" TextWrapping="Wrap" VerticalAlignment="Bottom" HorizontalAlignment="Left" Text="{Binding Nome}" FontWeight="Bold" />
                                    <TextBlock Foreground="Black" TextWrapping="Wrap" VerticalAlignment="Bottom" HorizontalAlignment="Left" Text="{Binding Renavam}" FontSize="23" />
                                    <TextBlock Foreground="Black" TextWrapping="Wrap" VerticalAlignment="Bottom" HorizontalAlignment="Left" Text="{Binding CPF_CNPJ}" FontSize="23" />
                                </StackPanel>
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
    

     
     private void lbDocumento_Hold(object sender, GestureEventArgs e)
            {
                ListBox lista = (ListBox)sender;
                
                Documento doc = ((Documento)lista.SelectedValue);
                
                if (doc != null)
                {
                    MessageBoxResult resultado = MessageBox.Show("Deseja excluír o documento do " + doc.Nome + " ?", "", MessageBoxButton.OKCancel);
                    if (resultado == MessageBoxResult.OK)
                    {
                        linq.Documento.DeleteOnSubmit(doc);
                        linq.SubmitChanges();
                    }
    
                }
            }
    

    quarta-feira, 16 de novembro de 2011 23:03

Respostas

  • Paulo,

    Não cheguei a testar, pois não estou com o VS aqui, mas ao inves de usar o SelectedValue, já tentou o SelectedItem?

    Outra opção é o ContextMenu do Toolkit, talvez resolva seu problema. Acredito que seu código ficaria mais, ou menos assim"

    <ListBox Height="394" HorizontalAlignment="Left" Margin="0,368,0,0" Name="lbDocumento" VerticalAlignment="Top" Width="456" SelectionChanged="lbDocumento_SelectionChanged">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal">

                                <StackPanel Margin="10" Width="382">
                                    <TextBlock Foreground="Blue" TextWrapping="Wrap" VerticalAlignment="Bottom" HorizontalAlignment="Left" Text="{Binding Nome}" FontWeight="Bold" />
                                    <TextBlock Foreground="Black" TextWrapping="Wrap" VerticalAlignment="Bottom" HorizontalAlignment="Left" Text="{Binding Renavam}" FontSize="23" />
                                    <TextBlock Foreground="Black" TextWrapping="Wrap" VerticalAlignment="Bottom" HorizontalAlignment="Left" Text="{Binding CPF_CNPJ}" FontSize="23" />
                                </StackPanel>
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>

    private void MenuItem_Click(object sender, RoutedEventArgs e)
    {
        Documento doc = (Documento)((MenuItem)sender);
    }

     

    Abraços


    Thiago J. Mônaco
    MCP, MCAD, MCSD, MCDBA, MCTS, MCPD and MCT Professional
    Scrum Developer I and Professional Scrum Master
    http://www.windowsphonebrasil.net
    @thiagojmonaco
    • Marcado como Resposta Fernando Figuera terça-feira, 13 de dezembro de 2011 16:55
    quinta-feira, 17 de novembro de 2011 01:51

Todas as Respostas

  • Paulo,

    Não cheguei a testar, pois não estou com o VS aqui, mas ao inves de usar o SelectedValue, já tentou o SelectedItem?

    Outra opção é o ContextMenu do Toolkit, talvez resolva seu problema. Acredito que seu código ficaria mais, ou menos assim"

    <ListBox Height="394" HorizontalAlignment="Left" Margin="0,368,0,0" Name="lbDocumento" VerticalAlignment="Top" Width="456" SelectionChanged="lbDocumento_SelectionChanged">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal">

                                <StackPanel Margin="10" Width="382">
                                    <TextBlock Foreground="Blue" TextWrapping="Wrap" VerticalAlignment="Bottom" HorizontalAlignment="Left" Text="{Binding Nome}" FontWeight="Bold" />
                                    <TextBlock Foreground="Black" TextWrapping="Wrap" VerticalAlignment="Bottom" HorizontalAlignment="Left" Text="{Binding Renavam}" FontSize="23" />
                                    <TextBlock Foreground="Black" TextWrapping="Wrap" VerticalAlignment="Bottom" HorizontalAlignment="Left" Text="{Binding CPF_CNPJ}" FontSize="23" />
                                </StackPanel>
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>

    private void MenuItem_Click(object sender, RoutedEventArgs e)
    {
        Documento doc = (Documento)((MenuItem)sender);
    }

     

    Abraços


    Thiago J. Mônaco
    MCP, MCAD, MCSD, MCDBA, MCTS, MCPD and MCT Professional
    Scrum Developer I and Professional Scrum Master
    http://www.windowsphonebrasil.net
    @thiagojmonaco
    • Marcado como Resposta Fernando Figuera terça-feira, 13 de dezembro de 2011 16:55
    quinta-feira, 17 de novembro de 2011 01:51
  • Thiago,

    na verdade eu já uso o evento SelectionChanged para poder selecionar o documento e exibir no formulário. O que eu quero fazer é que quando o usuário segurar o documento com o dedo "evento hold", eu pergunte se ele quer excluír o item.

     

    Espero ter sido claro!

     

    Sabe me dizer se através do evento hold de um listbox eu consigo saber qual foi o item que o usuário segurou?

    • Sugerido como Resposta Pedro LamasMVP quinta-feira, 17 de novembro de 2011 11:25
    • Não Sugerido como Resposta Pedro LamasMVP quinta-feira, 17 de novembro de 2011 11:25
    quinta-feira, 17 de novembro de 2011 11:10
  • Penso que o ideal seria utilizares o evento Hold do StackPanel que tens dentro do template, em vez da lista!

    Assim podes fazer simplesmente isto:

    private void StackPanel_Hold(object sender, GestureEventArgs e)
    {
        var item = ((StackPanel)sender).DataContext;
    }
    



    Pedro Lamas
    DevScope | Senior Solution Developer & WP7 Development Speaker
    www.pedrolamas.com | @pedrolamas
    • Sugerido como Resposta Pedro LamasMVP quinta-feira, 17 de novembro de 2011 11:24
    quinta-feira, 17 de novembro de 2011 11:24
  • Já agora, para manteres o comportamento normal do Windows Phone (ao carregar num item da lista, aparece um pequeno menu com opções, sendo uma delas o "delete" - algo que podes ver no email), o ideal é utilizares o ContextMenu que podes encontrar no Silverlight for Windows Phone Toolkit!

    Se fores ao Codeplex e fizeres o download do código, podes lá ver uma demo completa da utilização deste controlo para o efeito que pretendes! :)


    Pedro Lamas
    DevScope | Senior Solution Developer & WP7 Development Speaker
    www.pedrolamas.com | @pedrolamas
    • Sugerido como Resposta Pedro LamasMVP quinta-feira, 17 de novembro de 2011 11:27
    quinta-feira, 17 de novembro de 2011 11:27