2012-01-17 6 views
0

Windows Phone 7アプリケーションでは、ListBoxのOnSelectedIndexChangeを処理する次のコードがあります。ユーザーが戻るボタンを押した後のListBoxおよびselectedIndexChangedイベント

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イベントを見ましたが、タブイベントから選択したItemを取得する方法を見つけられませんでした。

答えて

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)); 
     } 
    } 
} 
+0

これはトリッキーでした。 – atbebtg

2

SelectionChangedを使用してナビゲートする場合、ナビゲーションロジックをチェックしてSelectedIndex = -1かどうかを確認します。移動した後、イベントを2回発生させないように、インデックスを-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; 
       } 
      } 
0

私はUserControl内にこのような問題がありました。送信者を確認し、イベントをトリガーしているListBoxコントロールでない場合は戻ります。

protected void cbEvents_SelectedIndexChanged(object sender, EventArgs e) 
    { 
    if (sender is DropDownList) 
     RebindGrid(); 
    } 
関連する問題