在我的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事件,但我找不到从标签事件中获取所选项目的方法。
答案 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();
}