Выбор списка не изменен - PullRequest
1 голос
/ 12 марта 2012

Я пытаюсь выбрать определенный элемент при событии selectionchange ListPicker для WP7.Я считаю, что правильно реализовал ListPicker и связал массив текста с ListPicker, но моя проблема возникает при попытке выбрать определенный элемент в ListPicker.Мой ListPicker находится в моем файле SettingsPage.xaml, и я хотел бы передать определенную строку моему объекту MainPage.xaml для использования там.Мой код выглядит следующим образом:

SettingsPage.xaml

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

<!--Pivot Control-->
    <controls:Pivot Title="QUEST">
        <!--Pivot item one-->
        <controls:PivotItem Header="browser">
            <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>                
            <!--<Grid/>-->
        </controls:PivotItem>

SettingsPage.xaml.cs

    string searchProvider;

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


    private void SearchProviderListPicker_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        if(e.AddedItems.Equals("Google"))
        {
            searchProvider = "http://www.google.com/search?q=";
        }
        else if(e.AddedItems.Equals("Bing"))
        {
            searchProvider = "http://www.bing.com/search?q=";
        }


        //if (SearchProvider.Equals("Google"))
        //{
        //    searchProvider = "http://www.google.com/search?q=";
        //}
        //else if(SearchProvider.Equals("Bing"))
        //{
        //    searchProvider = "http://www.bing.com/search?q=";
        //}

    }        

    public SettingsPage()
    {
        InitializeComponent();

        this.SearchProviderListPicker.ItemsSource = SearchProvider;
    }

    protected override void OnNavigatedFrom(NavigationEventArgs e)
    {
        base.OnNavigatedFrom(e);

        //Send searchProvider to MainPage.xaml
        if (searchProvider != null)
        {
            //this.NavigationService.Navigate(new Uri("/MainPage.xaml?curProvider=" + searchProvider, UriKind.Relative));
            NavigationContext.Equals("curProvider=" + searchProvider);
        }            
    }

MainPage.xaml.cs

string _searchProvider;

//OnNavigatedTo method
    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        base.OnNavigatedTo(e);

        //for Search Provider (from SettingsPage.xaml)
        NavigationContext.QueryString.TryGetValue("curProvider", out _searchProvider);


    }

private void SearchBar_Click(object sender, KeyEventArgs e)
    {
        string search;
        string _search = SearchBar.Text;
        search =  HttpUtility.UrlEncode(_search);

        //search whats in the searchbar
        //use inputscope enter key to start search!
        if (e.Key == Key.Enter)
        {
            //check to ensure absolute navigation uri, else search through bing?
            if (String.IsNullOrEmpty(search)) 
                return;
            if (search.Equals("about:blank")) 
                return;

            if (_searchProvider != null)
            {                  
                TheBrowser.Navigate(_searchProvider + search);
            }

            //Google
            //TheBrowser.Navigate("http://www.google.com/search?q=" + search);

            //Bing
            //TheBrowser.Navigate("http://www.bing.com/search?q=" + search);

            //Yahoo
            //TheBrowser.Navigate("http://search.yahoo.com/search?p=" + search);

            //Ask
            //TheBrowser.Navigate("http://www.ask.com/web?q=" + search);

            //AOL
            //TheBrowser.Navigate("http://search.aol.com/search?q=" + search);


            //lose focus of textbox while navigating
            this.Focus();
        }
    }

По сути, я хотел бы передать выбранный элемент ListPicker на MainPage, чтобы он мог использоваться в качестве поставщика поиска по умолчанию для элемента управления веб-браузера.Любые идеи о том, как это может быть реализовано?Любая помощь по коду будет принята с благодарностью. Я действительно не уверен, как правильно выполнить это (на данный момент у меня нет никаких ошибок отладки или времени выполнения, но веб-браузер не выполняет поиск при попытке использовать выбранный элемент ListPicker)?Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 02 июля 2012
ListPickerItem Item = SearchProviderListPicker.SelectedItem as ListPickerItem;
 string type = Item.Content.ToString();

Получает строку элемента.

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

Следующий пункт даст вам выбранный элемент.


private void SearchProviderListPicker_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        string selectedItem = e.AddedItems[0] as string; //I'm not sure, whether it'll be string. Please check the type of objects in the list. But the logic will be the same.
        if(selectedItem == "Google")
        {
            searchProvider = "http://www.google.com/search?q=";
        }
        else if(selectedItem == "Bing")
        {
            searchProvider = "http://www.bing.com/search?q=";
        }
        //Continue the comparison

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...