none
页面导航传参问题 RRS feed

  • 问题

  • 也页面导航时只能传递string类型的参数吗?要传递一个像list这样的集合类型怎么处理啊?
    2012年3月5日 5:24

答案

全部回复

  • 用url传参数的方法不是很常用,一般建议使用页面类的public static成员在不同页面间共享数据。
    2012年3月5日 12:31
  • 你好,可以在当前页面中定义一个List字段并设为public,在跳转到第二个页面的时候重写OnNavigatedTo方法,并将其e.Content转换为之前的页面。这样就可以访问到List值了。具体请参考FAQ的第七条

    http://social.msdn.microsoft.com/Forums/zh-CN/windowsphonezhchs/thread/5aacf6ab-dab7-4dcc-9d3d-d2c9095e490e

    • 已标记为答案 Shi Ding 2012年3月13日 6:33
    2012年3月6日 2:12
  • 按你提供的第三种方法进行共享数据发现不行;

    在MainPivotPage中触发listbox的select 事件进行页面跳转到PropertyDetailPage页面;

    在MainpivotPage中定义了

    public MainViewModel vm;

    public MainPivotPage()
            {
                InitializeComponent();
                vm = new MainViewModel();
                PropertyList.Loaded +=new RoutedEventHandler(PropertyList_Loaded);
                PropertyList.PropertyListBox.SelectionChanged +=new SelectionChangedEventHandler(PropertyListBox_SelectionChanged);
                CommunityList.Loaded +=new RoutedEventHandler(CommunityList_Loaded);
                CommunityList.CommunityListBox.SelectionChanged += new SelectionChangedEventHandler(CommunityListBox_SelectionChanged);
            }

    NavigationService.Navigate(new Uri("/PropertyDetailPage.xaml?item="+((ListBox)sender).SelectedIndex.ToString(), UriKind.Relative));

    在PropertyDetailPage重写了

    protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
            {
                if (e.Content is MainPivotPage)
                {
                    vm = (e.Content as MainPivotPage).vm.Properties[int.Parse(NavigationContext.QueryString["item"])];
                    DataContext = vm;
                }
            }

    if语句中根本都不走的,查看e.Content是PropertyDetailPage

    我的使用哪里有错吗?

    2012年6月2日 14:21
  • 你好,

    我最近也是发现FAQ之前写的有问题,也谢谢你指出。

    正确的应该是在MainPivotPage 的OnNavigatedFrom事件中将e.Content转化为PropertyDetailPage。

    在MainPivotPage 的OnNavigatedFrom事件中可以对PropertyDetailPage中的公共属性进行赋值,从而达到传值的目的。

    2012年6月5日 1:36
  • 我还是没有明白你的意思,如果是从PageA跳转到PageB,

    那么在PageA中

     protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
    {

        if (e.Content is PageB)

        {

            var v = (e.Content as PageB).SomeProperty;

        }

    但是我对上面的理解是,从pageA导航到pageB,却是从pageB传参到pageA中,不知我的理解是否正确?

    2012年6月5日 7:50
  • 恩,确实代码没写的很明确

    protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
    {    if (e.Contentis PageB)

        {

            (e.Content as PageB).SomeProperty = XXX;

        }

    2012年6月5日 7:53