目前我正在为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));
}
在我导航到的页面上,离开导航页面的唯一方法是按回按钮或开始按钮,这意味着它将返回到包含列表框的页面。当我向后导航时,选择更改触发器有时会导致我发生异常。以前有人经历过这个吗?
答案 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?