2012-03-12 5 views
0

Je rencontre un problème avec mon contrôle ListPicker. J'ai mis mon listpicker dans ma page suivante mais je reçois un IndexOutOfRangeException lors de l'exécution, et je ne suis pas tout à fait sûr de la façon de résoudre le problème:ListPicker IndexOutOfRangeException

SettingsPage.xaml

<phone:PhoneApplicationPage.Resources> 
    <DataTemplate x:Name="SearchProviderItemTemplate"> 
     <TextBlock Text="{Binding SearchProvider}" /> 
    </DataTemplate> 
</phone:PhoneApplicationPage.Resources> 

<ScrollViewer x:Name="ContentPanel_Browser" Margin="12,0,12,0"> 
       <Grid> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition/> 
         <ColumnDefinition/> 
        </Grid.ColumnDefinitions> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="Auto"/> 
         <RowDefinition Height="70"/> 
         <RowDefinition Height="70"/> 
         <RowDefinition/> 
         <RowDefinition/> 
         <RowDefinition/> 
        </Grid.RowDefinitions> 

        ... 

        <!-- Search Provider --> 
        <TextBlock Text="Search provider" Margin="12,7,12,8" 
         Grid.Row="3" VerticalAlignment="Bottom" 
         Foreground="{StaticResource PhoneSubtleBrush}"/> 
        <toolkit:ListPicker x:Name="SearchProviderListPicker" Grid.Row="4" Grid.ColumnSpan="2" Margin="12,0,12,0" 
             ItemTemplate="{Binding SearchProviderItemTemplate}" 
             SelectionChanged="SearchProviderListPicker_SelectionChanged" /> 
       </Grid> 
      </ScrollViewer>     

SettingsPage.xaml. cs

string searchProvider; 

    String[] SearchProvider = 
    { 
     "Google", 
     "Bing", 
     "Yahoo", 
     "Ask", 
     "AOL" 
    }; 

    private void SearchProviderListPicker_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     string selectedItem = e.AddedItems[0] as string; //IndexOutOfRangeException was unhandled 

     switch (selectedItem) 
     { 
      case "Google": 
       searchProvider = "http://www.google.com/search?q="; 
       break; 
      case "Bing": 
       searchProvider = "http://www.bing.com/search?q="; 
       break; 
      case "Yahoo": 
       searchProvider = "http://search.yahoo.com/search?p="; 
       break; 
      case "Ask": 
       searchProvider = "http://www.ask.com/web?q="; 
       break; 
      case "AOL": 
       searchProvider = "http://search.aol.com/search?q="; 
       break; 
      //default: 
      // SearchProvider = "http://search.aol.com/search?q="; 
      // break; 
     } 

Le IndexOutOfRangeException se produit avec la ligne 'chaîne selectedItem = e.AddedItems [0] en tant que chaîne de caractères;' dans SettingsPage.xaml.cs. Je me souviens d'avoir vu comment résoudre ça quelque part sur StackOverflow mais je n'arrive pas à trouver cette source maintenant. Une idée sur la façon de définir les limites ou de vérifier que cette exception ne se produira pas? Merci d'avance (n'importe quelle aide de code aiderait je suis nouveau à ceci!).

Répondre

2

Comme AddedItems est un IList, ne pouvez-vous pas vérifier qu'il contient des éléments avant d'y accéder?

Quelque chose comme ce qui suit au sommet de la méthode devrait résoudre le problème:

if (e.AddedItems.Count <= 0) 
{ 
    return; 
}