2012-01-31 3 views
0

В настоящее время я разрабатываю приложение для WP7, но столкнулся с небольшой проблемой при вызове события Listbox Selection_Change. Проблема в том, что когда я возвращаюсь на страницу, содержащую список, триггеры event_change не изменяются вообще или без какого-либо ввода пользователем. Код ListBox похож на это: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)); 
} 

На странице я перейдите к, единственный выход из управления судной страницы, нажав кнопку назад или кнопку запуска означает, что он будет вернуться к странице, которая содержит ListBox , Когда я вернусь назад, триггеры изменения выбора приводят меня иногда к исключению. Кто-нибудь прошел через это раньше?

ответ

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 :(Никогда не думал о том, чтобы использовать диспетчера для навигации по сравнению с этим: D –

+0

Затем прочитайте, что написал @ mikael-koskinen. «Четко выбирая его с помощью вашего собственного кода. –

+0

Эй, Клаус разрабатывал другое приложение, и столкнулся с той же проблемой, что, оказывается, когда я перехожу к другой странице, нажимая элемент списка и нажимая назад, и назначая новый источник данных для list, он возвращается в selection_changed из списка, и если вы не проверяете if (index> -1), он выдает исключение nullreferrence. Спасибо Клаус: D –

1

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

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

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

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

Возможно, есть что-то в вашем коде, который предполагает, что SelectedBlot ListBox имеет значение NULL, когда пользователь переходит на страницу?

+0

Я не помню, но я рассмотрю его снова thanx –