2014-01-11 6 views
0

У меня есть экран со списком (listbox принимает элементы из наблюдаемой коллекции), где пользователь может выбрать элемент.Наблюдаемая коллекция и система.ArgumentOutOfRangeException

это код, который показывает, что происходит, когда пользователь нажимает на пункте:

// method is invoked when we select the element from the list 
     private void ItemsList_SelectionChanged(object sender, SelectionChangedEventArgs e) 
     { 
      // getting object which was clicked in the listbox 
      dbFoodTable item = Fooditems.ElementAt(ItemsList.SelectedIndex); 
      // mark this object as choosenMeal and store it to get it back in next page 
      PhoneApplicationService.Current.State["choosen"] = item; 
      //going to next page 
      NavigationService.Navigate(new Uri("Customization.xaml", UriKind.Relative));    
     } 

Когда я выбираю этот пункт из выпадающего списка, когда я иду к следующему экрану, где у меня есть все детали этого пункта (например, приз , описание, имя ...), ошибка показывает, когда я поддерживаю этот экран списка.

эта линия

dbFoodTable item = Fooditems.ElementAt(ItemsList.SelectedIndex); 

подчеркнут с этой информацией Исключение типа «System.ArgumentOutOfRangeException» произошло в mscorlib.ni.dll, но не был обработан в пользовательском коде. Эта линия находится в

ItemsList_SelectionChanged 

способ.

Было бы идеально, если бы этот метод не был даже вызван, когда я поддерживаю, но мир не идеален. Я думаю, что это работает таким образом, когда мы переходим на другую страницу, которую мы выбрали, например, второй элемент, и когда мы поддерживаем этот экран, этот элемент больше не выбран => selectchanged => метод вызова

Как я должен решить Эта проблема ?

+1

Я подозреваю, что 'ListBox' не имеет ничего, поэтому' SelectedIndex' равно -1. Просто проверьте это в условном выражении и не выполняйте свой код. – Steve

+0

Да, конечно, я должен сделать это с помощью инструкции .. thx для справки, написать ее как ответ, и я бы принял его – MyWay

ответ

1

Почему бы не убедиться, что selectedIndex существует в списке с выражением «if»?

+0

thx для ответа, да, я проверяю с помощью инструкции «if», что selectedInex не равен -1, и это работает – MyWay

+0

Почему это не так в вашем посте? Разве это не исключение? Почему вы не проверяете там индекс? –

+0

, потому что я делаю это после вашего ответа и комментария Стива, раньше мой код выглядел так, как в post :) – MyWay

Смежные вопросы