在页面之间传递数组参数

时间:2013-12-19 17:56:58

标签: c# windows-phone-7 windows-phone-8

我正在尝试将一个数组从page1.xaml传递到page2.xaml。

int[] array = new int[] { 2,4,6,8,10,12,14,15,17,19,21,23,25,27,28,30,32,34,36,38,40,42,43,45,47,49,51,53,55,56,58,60,62,64,66,68,70,71,73,75,77,79,81,83,84,86,88,90,92,94,96,98,99 
        };
NavigationService.Navigate(new Uri("/Page2.xaml?Parameter" + array, UriKind.Relative));

如何在第2页中获取此数组值?

4 个答案:

答案 0 :(得分:3)

通过导航传递网址参数仅适用于少数几项:

对于实时图块或指示应用程序的状态等非常有用。

如果您在页面之间传递更复杂的数据,特别是如果传递了该数据的页面不是导航目标 - 您绝对不应该这样传递它。

(如果您必须,您可以将其编码为JSON,然后对其进行urlencode,但不要。)

使用服务或存储库模式进行此类操作。

我:

  • 在其类文件中定义服务以管理该集合的数据。
  • App.xaml.cs中,创建服务并将DI传递给页面。
  • 使用更健全的持久性方式在两个页面中对服务发出请求。

答案 1 :(得分:3)

   int[] array = new int[] { 2,4,6,8,10,12,14,15,17,19,21,23,25,27,28,30,32,34,36,38,40,42,43,45,47,49,51,53,55,56,58,60,62,64,66,68,70,71,73,75,77,79,81,83,84,86,88,90,92,94,96,98,99 
            };
you could use join function like this
string str= string.Join("-", array.ToArray());
    NavigationService.Navigate(new Uri("/Page2.xaml?Parameter="+str, UriKind.Relative));

And in destination page get this passed query string using split function like this

str.Split('-');

答案 2 :(得分:1)

而不是将数组作为查询字符串传递。使用Global静态类来保存值。 只需在另一个位置使用该类的对象。并在任务完成时创建该类的新对象。

答案 3 :(得分:0)

你可以试试这个

page.NavigationService.Navigate(new Uri("/Page2.xaml?Parameter="+array, UriKind.Relative));

目标网页:

string parameter = string.Empty;
if (NavigationContext.QueryString.TryGetValue("parameter", out parameter)) {
    this.label.Text = parameter;
}

请注意,您正在创建没有'='的uri。请更正。

也请检查这个问题,这里有很好的解释:

How to pass values (parameters) between XAML pages?

编辑:上述建议可能不适用于除字符串以外的任何内容,请查看详细解决方案

Passing a complex object to a page while navigating in a WP7 Silverlight application