ListPicker IndexOutOfRangeException - PullRequest
       1

ListPicker IndexOutOfRangeException

0 голосов
/ 13 марта 2012

У меня проблема с элементом управления ListPicker.Я реализовал свой 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 со строкой 'string selectedItem = e.AddedItems [0] как строка;'в SettingsPage.xaml.cs.Я помню, как видел, как решить эту проблему где-то в StackOverflow, но сейчас я не могу найти этот источник.Любая идея о том, как установить границы или проверить, чтобы это исключение не произошло?Заранее спасибо (любая помощь по коду поможет мне быть новичком в этом!).

1 Ответ

2 голосов
/ 13 марта 2012

Поскольку AddedItems является IList, можете ли вы просто проверить, что в нем есть какие-то элементы, прежде чем пытаться получить к ним доступ?

Что-то вроде следующего в верхней части метода должно решить проблему:

if (e.AddedItems.Count <= 0)
{
    return;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...