0

現在、WP7用のアプリを開発していますが、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

リストにデータが入力されると、イベントが発生します。

最も簡単な解決策は、ナビゲーションをトリガーする前に、何も選択されていないことを確認するチェックを追加することです。

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

注意すべき点の1つは、ListBoxを含むページに戻ると、ListBoxには、ユーザーが移動したときの値に設定されたSelectedItemが残っていることです。これは、lsbHistory.SelectedIndexが、ユーザーが前方に移動したときに選択されたアイテムのインデックスを取得することを意味します。

コードに、ユーザーがページに移動したときにListBoxのSelectedItemがnullであると想定するものがあるのではないでしょうか。

于 2012-01-31T11:20:03.440 に答える