2012-03-12 103 views
0

我有我的ListPicker控件的问题。我已经实现了我的listpicker在我的页面如下但是我在运行时收到IndexOutOfRangeException,我不太清楚如何来解决这个问题: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; 
     } 

的IndexOutOfRangeException与线路中发生 '字符串将selectedItem = e.AddedItems [0]作为串;'在SettingsPage.xaml.cs中。我记得看到如何解决这个StackOverflow的某个地方,但我现在找不到这个源。有关如何设置边界或检查以确保不会发生此异常的任何想法?提前致谢(任何代码的帮助将帮助我对此是新的!)。

回答

2

由于AddedItems是一个IList,你能不能在你尝试访问它之前检查它是否有一些项目?

喜欢的东西在方法的顶部以下应该解决的问题:

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