简体   繁体   中英

Passing parameters from page navigation and binding them to webbrowser in WP7

I have 2 pages. Page1 wants to navigate to Page 2 using:

 private void listbox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            int index = listbox1.SelectedIndex;
            String pom = "";
            RssDataSet ob = lista.ElementAt(index);
            pom = pom + ob.description;
            NavigationService.Navigate(new Uri("/novaStrana.xaml?id="+pom, UriKind.Relative));
        }

It's basically taking the index from the listbox1, getting some info about it from ob and navigating to Page2.

Here's the problem now: I can't get my "pom" parameter on Page2. Basically my OnNavigatedTo method is not firing. The Page2 page looks as follows:

public novaStrana()
        {

            InitializeComponent();            
        }

        protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
        {
            String stuff = "";
            base.OnNavigatedTo(e);

            string msg = "";

             if (NavigationContext.QueryString.TryGetValue("msg", out msg))
            {

                stuff = msg;
            }
        }

Why is it not firing at all? I know this because I tried debugging loads of times.

I run the emulator, click on my list item, the debugger shows me that Page2 is being initialised meaning the constructor is running, but once the constructor is done that's it. Page2 doesn't even reach OnNavigatedTo.

Thanks for any help.

EDIT: Page2:

namespace ZaParsiranje
{
    public partial class novaStrana : PhoneApplicationPage
    {

        public novaStrana()
        {

             InitializeComponent();            
        }

        protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
        {
            String stuff = "";
            base.OnNavigatedTo(e);

            string msg = "";

            if (NavigationContext.QueryString.TryGetValue("id", out msg))
            {

                stuff = msg;
            }
        }


    }
}

And the xalm of Page2:

    <phone:PhoneApplicationPage 
    x:Class="ZaParsiranje.novaStrana"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    FontFamily="{StaticResource PhoneFontFamilyNormal}"  
    FontSize="{StaticResource PhoneFontSizeNormal}"
    Foreground="{StaticResource PhoneForegroundBrush}"
    SupportedOrientations="Portrait" Orientation="Portrait"
    mc:Ignorable="d" d:DesignHeight="768" d:DesignWidth="480"
    shell:SystemTray.IsVisible="True" Loaded="PhoneApplicationPage_Loaded">

    <!--LayoutRoot is the root grid where all page content is placed-->
    <Grid x:Name="LayoutRoot" Background="Transparent">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <!--TitlePanel contains the name of the application and page title-->
        <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
            <TextBlock x:Name="ApplicationTitle" Text="MY APPLICATION" Style="{StaticResource PhoneTextNormalStyle}"/>
            <TextBlock x:Name="PageTitle" Text="page name" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
        </StackPanel>

        <!--ContentPanel - place additional content here-->
        <Grid x:Name="ContentPanel" Grid.Row="1">
            <phone:WebBrowser Name="WebBroser1" />
        </Grid>
    </Grid>

    <!--Sample code showing usage of ApplicationBar-->
    <!--<phone:PhoneApplicationPage.ApplicationBar>
        <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True">
            <shell:ApplicationBarIconButton IconUri="/Images/appbar_button1.png" Text="Button 1"/>
            <shell:ApplicationBarIconButton IconUri="/Images/appbar_button2.png" Text="Button 2"/>
            <shell:ApplicationBar.MenuItems>
                <shell:ApplicationBarMenuItem Text="MenuItem 1"/>
                <shell:ApplicationBarMenuItem Text="MenuItem 2"/>
            </shell:ApplicationBar.MenuItems>
        </shell:ApplicationBar>
    </phone:PhoneApplicationPage.ApplicationBar>-->

</phone:PhoneApplicationPage>

I can't get my "pom" parameter on Page2

You are trying to get the value of QueryString by "msg" while you are storing it with "id" key. How could you expect to get the right result?

Just correct your code:

if (NavigationContext.QueryString.TryGetValue("id", out msg))
{
    stuff = msg;
}

EDIT

or the way to get the queryString :

get it within ur constructor

public novaStrana()
        {
            InitializeComponent();            

            Loaded += (o, e) =>
            {
                  if (NavigationContext.QueryString.TryGetValue("id", out msg))
                  {
                        stuff = msg;
                  }
            }

        }

where stuff & msg are defined outside of the constructor (within ur class).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM