Windows Phone 7 Selection_Changed автоматически - PullRequest
0 голосов
/ 31 января 2012

В настоящее время я занимаюсь разработкой приложения для 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 ]

2 голосов
/ 31 января 2012

Всегда проверяйте, действительно ли это -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 голос
/ 31 января 2012

Следует отметить, что при переходе обратно на страницу , которая содержит ListBox, ListBox по-прежнему имеет для SelectedItem значение равное значению, которое он имел, когда пользователь уходил,Это означает, что lsbHistory.SelectedIndex получит индекс элемента, который был выбран при переходе пользователя вперед.

Возможно, в вашем коде есть что-то, что предполагает, что SelectedItem объекта ListBox равен нулю, когда пользователь переходит на страницу?

1 голос
/ 31 января 2012

Событие будет сгенерировано при заполнении списка.

Возможно, самое простое решение для вас - добавить проверку, что ничего не выбрано до запуска навигации:

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