2012-01-31 106 views
0

目前我正在为WP7开发一个应用程序,但遇到了Listbox事件调用Selection_Change的一个小问题。问题是,当我返回到包含列表框的页面时,selection_change事件触发器根本没有被改变,也没有任何用户输入。列表框代码类似于此:Windows Phone 7 Selection_Changed自动

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

在我浏览网页,出了导航页面的唯一方法是通过按后退按钮或启动按钮的含义,它会返回一个包含列表框的页面。当我导航选择更改触发器时,有时会导致我发生异常。有没有人通过这之前?

回答

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有更好,更流畅,网页过渡。

+0

感谢克劳斯的回应,事情是,当它被自动选择时,索引被设置为0 :(从未想过使用调度器导航thanx:D – 2012-01-31 18:21:44

+0

然后阅读@ mikael-koskinen写了什么。 '清楚地选择它与你自己的代码 – 2012-01-31 19:50:34

+0

嘿克劳斯正在开发另一个应用程序,并遇到同样的问题,事实证明,当我导航到另一个页面单击列表框项目和按下后,并分配一个新的itemssource到列表它返回到列表框的selection_changed,如果你不验证if(index> -1),它将抛出nullreferrence异常。谢谢Claus:D – 2012-04-10 13:33:15

1

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

你最简单的解决方案将可能是添加一个检查,没有什么触发你的导航之前选择:

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

有一点要注意的是,当你浏览返回页面这containt列表框,列表框仍然具有SelectedItem设置为到用户导航时的值。这意味着lsbHistory.SelectedIndex将获得用户向前导航时选择的项目的索引。

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

+0

我不记得了,但我会再次看看它thanx – 2012-02-01 19:11:20