使用UWP中的Frame.Navigate发送参数

时间:2018-10-10 02:08:08

标签: c# uwp

一个用于在此处临时存储我的输入值的类。

namespace App2
{
    class methC
    {
        public string tb1 { get; set; }
        public string tb2 { get; set; }
        public string tb3 { get; set; }
        public string tb4 { get; set; }
        public string tb5 { get; set; }
        public string tb6 { get; set; }

        public methC(string tb1, string tb2, string tb3)
        {
            this.tb1 = tb1;
            this.tb2 = tb2;
            this.tb3 = tb3;
            //this.right1 = right1;
            //this.right2 = right2;
            //this.right3 = right3;
            //this.Box = Box;
            //this.Grade = Grade; 
        }
    }
}

带有参数的第一页

namespace App2
{
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
        }

        private void btn1_Click(object sender, RoutedEventArgs e)
        {
            methC mc = new methC(tb1.Text, tb2.Text, tb3.Text);
            Frame.Navigate(typeof(BlankPage1));
        }


    }
}

如何获取存储在tb1,tb2,tb3中的数据显示在BlankPage1中?

namespace App2
{
    public sealed partial class BlankPage1 : Page
    {
        public BlankPage1()
        {
            this.InitializeComponent();


        }

        private void btn2_Click(object sender, RoutedEventArgs e)
        {

            string four, five, six;
            four = tb4.Text;
            five = tb5.Text;
            six = tb6.Text;
            box.Text = four + five + six;
        }

        private void TextBlock_SelectionChanged(object sender, RoutedEventArgs e)
        {

        }
    }

}

假设工作原理,MainPage进入3个条目,存储在methC中并从BlankPage获取显示tb1,tb2,tb3。我该怎么做?

2 个答案:

答案 0 :(得分:3)

只要您使用Type参数导航到另一页,就不能使用构造函数来传递数据。因此Microsoft提供了另一种方式来完成这项工作。

您可以使用以下导航功能的重载来传递对象:

        methC mc = new methC(tb1.Text, tb2.Text, tb3.Text);
        string Param = JsonConvert.SerializeObject(mc);
        Frame.Navigate(typeof(BlankPage1), Param);

在BlankPage1中覆盖OnNavigatedTo:

 protected override void OnNavigatedTo(NavigationEventArgs e)
 {
     methC myData = JsonConvert.DeserializeObject<methC>((string)e.Parameter);

     Labelx.Text = myData.x;
     , ....

     base.OnNavigatedTo(e);
 }

这来自MSDN

最糟糕的情况是通过静态成员分配它们,因此在BlankPage1类中可以添加:

 public static methC Data { get; set; } 

 public BlankPage1()
 {
      mylabel.Text = Data.X;
      , ....
 } 

,您可以在导航之前分配值:

        methC mc = new methC(tb1.Text, tb2.Text, tb3.Text);
        BlankPage1.Data = mc;
        Frame.Navigate(typeof(BlankPage1));

答案 1 :(得分:1)

在主页上,您可以直接传递类对象的参数。

methC mc = new methC(tb1.Text, tb2.Text, tb3.Text);
Frame.Navigate(typeof(BlankPage1), mc);

在您的下一页中,您可以将其作为类对象接收

protected override void OnNavigatedTo(NavigationEventArgs e) {
        navigationHelper.OnNavigatedTo(e);
        methC item = e.Parameter as methC;
    }