Событие ListBox и selectedIndexChanged после нажатия пользователем кнопки «Назад» - PullRequest
0 голосов
/ 17 января 2012

В моем приложении для Windows Phone 7 у меня есть следующий код для обработки OnSelectedIndexChange ListBox.

 private void wordList_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            WordList selectedList = (WordList)e.AddedItems[0];
            NavigationService.Navigate(new Uri("/Views/Game.xaml?ListName=" + selectedList.Name, UriKind.RelativeOrAbsolute));
        }

Приведенный выше код работает нормально. Однако, если пользователь нажимает кнопку аппаратного возврата на странице игры и щелкает тот же элемент списка, приведенный выше код не вызывается. Я предполагаю, что это потому, что выбранный элемент является тем же самым, поэтому событие SelectionChanged не вызывается.

Как мне сделать так, чтобы, если пользователь выбрал тот же элемент, я все еще мог отправить его на страницу Игры?

Я посмотрел на событие Tap, но не смог найти способ получить выбранный элемент из события вкладки.

Ответы [ 3 ]

2 голосов
/ 17 января 2012

При использовании SelectionChanged для навигации окружите логику навигации проверкой, чтобы увидеть, есть ли SelectedIndex = -1. После навигации установите индекс на -1, чтобы событие не сработало дважды.

   private void wordList_SelectionChanged(object sender, SelectionChangedEventArgs e)
            {
               var lb = sender as ListBox;
                if (lb != null)
                  {
                      if (lb.SelectedIndex == -1) return;

                WordList selectedList = (WordList)e.AddedItems[0];
                NavigationService.Navigate(new Uri("/Views/Game.xaml?ListName=" + selectedList.Name, UriKind.RelativeOrAbsolute));
                     lb.SelectedIndex = -1;
               }
            }
1 голос
/ 17 января 2012

Таким образом, вы можете получить выбранный элемент из события Tap.

private void wordList_Tap(object sender, GestureEventArgs e)
{
    var selectedElement = e.OriginalSource as FrameworkElement;
    if (selectedElement != null)
    {
        var selectedData = selectedElement.DataContext as WordList;
        if (selectedData != null)
        {
            NavigationService.Navigate(new Uri("/Views/Game.xaml?ListName=" + selectedData.Name, UriKind.RelativeOrAbsolute));
        }
    }
}
0 голосов
/ 29 марта 2012

У меня была такая проблема в UserControl. Проверьте отправителя и верните, если это не элемент управления ListBox, который вызывает событие:

  protected void cbEvents_SelectedIndexChanged(object sender, EventArgs e)
  {
    if (sender is DropDownList)
      RebindGrid();
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...