Search code examples
c#xamlwindows-phone-8longlistselector

LongListSelector: Item tap?


I am using LongListSelector control on Windows Phone 8 and can't figure out the best way to handle a tap on an item. The few examples I've found rely on the SelectionChanged event. However, this solution is buggy because if I tap an item that opens a new page, hit back, and then tap the same item again, it won't work because this item is already selected, so SelectionChanged is not triggered.

I tried to register to the tap event and use the current selected item as the tapped one, but some times the current selected item is not the one I expect.

I could wrap my ItemTemplate in a button and handle the tap for each item but I need to reskin the button to make it look like a simple list item.

Finally, I don't understand why it is so complicated to achieve such a basic thing. Is there a simple and standard way I missed?

My second wish is to get an effect on the item when it is tapped. Is there any standard way to do it?


Solution

  • You could null your LongListSelector's SelectedItem at the end of each SelectionChanged event. I.e.

    <phone:LongListSelector x:Name="LLS" SelectionChanged="LLS_SelectionChanged">
    

    And the event handler:

    private void LLS_SelectionChanged(object sender, SelectionChangedEventArgs e) {
    
      // If selected item is null, do nothing
      if (LLS.SelectedItem == null)
        return;
    
      // Navigate to the next page
      NavigationService.Navigate(new Uri("/nextpage.xaml", UriKind.Relative));
    
      // Reset selected item to null
      LLS.SelectedItem = null;
    }
    

    You'll fire the SelectionChanged event twice, but nothing's going to happen the second time round and you should get the behaviour that you're looking for - (i.e Setting SelectedItem to null will trigger a new SelectionChanged event, but this second event gets caught in the if-statement)

    As for the second part of your question, you might be better posting a new question.