Windows Phone 7 Selection_Changed自动

时间:2012-01-31 10:28:04

标签: windows-phone-7 listbox selectionchanged

目前我正在为WP7开发一款应用,但遇到了一个Listbox事件调用Selection_Change的小问题。问题是,当我返回到包含列表框的页面时,selection_change事件会触发而不会完全更改或没有任何用户输入。列表框代码与此类似:

private void lsbHistory_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    int index = lsbHistory.SelectedIndex;
    NavigationService.Navigate(new Uri("/Views/NextPage, UriKind.Relative));
}

在我导航到的页面上,离开导航页面的唯一方法是按回按钮或开始按钮,这意味着它将返回到包含列表框的页面。当我向后导航时,选择更改触发器有时会导致我发生异常。以前有人经历过这个吗?

3 个答案:

答案 0 :(得分:2)

请务必检查是否-1(默认值)。

private void lsbHistory_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    int index = lsbHistory.SelectedIndex;
    if (index != -1)
    {
        NavigationService.Navigate(new Uri("/Views/NextPage, UriKind.Relative));
        lsbHistory.SelectedIndex = -1; // Set it to -1, to enable re-selection.   
    }
}

此外,您应该考虑将Navigate电话打包在Dispatcher.BeginInvoke中,以便更好,更顺畅地进行页面转换。

答案 1 :(得分:1)

填充列表时将触发事件。

最简单的解决方案可能是在触发导航之前添加一项检查,确认没有选择任何内容:

if (lsbHistory.SelectedIndex > -1)
{
    // do navigation
}

答案 2 :(得分:1)

需要注意的一点是,当您将导航回包含ListBox的页面时,ListBox 仍然将SelectedItem设置为用户时的值航行了。这意味着lsbHistory.SelectedIndex将获取用户向前导航时选择的项目的索引。

也许你的代码中有些东西假定当用户导航到页面时ListBox的SelectedItem为null?