LongListSelector: Item tap?

Tom Esterez picture Tom Esterez · Jan 8, 2013 · Viewed 16.1k times · Source

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?

Answer

Stevie picture Stevie · Jan 9, 2013

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.