用户点击后退按钮后的ListBox和selectedIndexChanged事件

时间:2012-01-17 19:07:57

标签: windows-phone-7

在我的Windows Phone 7应用程序中,我有以下代码来处理ListBox的OnSelectedIndexChange。

 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 个答案:

答案 0 :(得分:2)

使用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 :(得分:1)

这样您就可以从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));
        }
    }
}

答案 2 :(得分:0)

我在UserControl中遇到了这样的问题。检查发件人,如果它不是触发事件的ListBox控件,则返回:

  protected void cbEvents_SelectedIndexChanged(object sender, EventArgs e)
  {
    if (sender is DropDownList)
      RebindGrid();
  }