2012-01-17 3 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 이벤트가 호출되지 않기 때문입니다.

사용자가 동일한 항목을 선택하더라도 계속 게임 페이지로 보낼 수 있도록하려면 어떻게해야합니까?

탭 이벤트를 살펴 봤지만 탭 이벤트에서 선택한 항목을 가져 오는 방법을 찾지 못했습니다.

답변

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인지 확인하십시오. 이동 한 후에는 이벤트를 두 번 실행하지 않도록 인덱스를 -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(); 
    } 
관련 문제