0

目前我正在为 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));
}

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

4

3 回答 3

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以获得更好、更流畅的页面转换。

于 2012-01-31T10:41:07.720 回答
1

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

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

于 2012-01-31T11:20:03.440 回答
1

填充列表时将触发该事件。

对您来说最简单的解决方案可能是在触发导航之前添加一个检查以确保没有选择任何内容:

if (lsbHistory.SelectedIndex > -1)
{
    // do navigation
}
于 2012-01-31T10:50:54.847 回答