0

我有自己的对象,我需要在另一个 Windows Phone 页面上查看该对象的列表。这是我到目前为止导航到我的其他页面的代码。我需要在另一页的列表框中列出车主列表

        private void btnOwners_Click(object sender, RoutedEventArgs e)
        {
             NavigationService.Navigate(new Uri
                    ("/ViewCarMembers.xaml?info=" + 
                      currentCar.Owners, UriKind.Relative));
        }

currentCar.Owners 基本上是该指定汽车的列表(属于 Car 类型)

谢谢

4

3 回答 3

1

还有另一种方法可以将您的对象传递到页面/从页面传递。我从 wp7 工具包中注意到了这个技巧。DatePicker 控件的工作原理相同。这是诀窍。

您可以使用以下方法获取根框架:

var frame = Application.Current.RootVisual as PhoneApplicationFrame

然后您可以使用以下命令导航到另一个页面:

frame.Navigate(someUri)

关键时刻是为 frame.Navigated 注册您的处理程序:

frame.Navigated += OnFrameNavigated;

然后您可以将任何值传递给您的导航页面,如下所示:

private void OnFrameNavigated(object sender, NavigationEventArgs e)
    {
        var myPage = e.Content as IMyPage;
        myPage.MyObject = new MyObject();
    }

这很简单!

于 2012-06-06T13:51:03.107 回答
0

您不能以这种方式通过 NavigationService.Navigate 传递对象,它的行为类似于 URL。

您需要将您需要的信息添加到查询字符串中,在 OnNavigatedTo 函数中读取它并使用这些值来生成您需要的数据:

private void btnOwners_Click(object sender, RoutedEventArgs e) 
{ 
      NavigationService.Navigate(new Uri("/ViewCarMembers.xaml?owners=1,2,3,4,5,6,7,8,9",UriKind.Relative)); 
} 

您正在导航到的页面中:

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) 
{ 
    var data = this.NavigationContext.QueryString; 

    if (data.ContainsKey("owners"))
    {
       //Iterate through values (comma seperated)
       //Populate a new list with the owners.
    }

    base.OnNavigatedTo(e); 
}

上面的代码还没有经过测试,这只是我为了理解这一点而编造出来的——你总是可以遍历你的列表并将完整的数据集附加到查询字符串中,将它推回到另一个对象中边。

一个更好的例子,看看 Shai Raiten 如何通过以下博客文章做到这一点:

http://blogs.microsoft.co.il/blogs/shair/archive/2011/05/01/wp7-data-between-pages-part-1.aspx

于 2012-04-19T13:16:50.097 回答
0

完成这项工作的一种方法是创建一个ToCSV()函数,该函数接受 aList<String>并将其转换为单个字符串,其中列表中的值用逗号分隔。然后,您可以按如下方式调用它:

private void btnOwners_Click(object sender, RoutedEventArgs e)
{
  NavigationService.Navigate(new Uri
    ("/ViewCarMembers.xaml?info=" + 
      ToCSV( currentCar.Owners ), UriKind.Relative));
}

ToCSV()函数需要调用Uri.EscapeDataString每个所有者名称,然后将其附加到输出字符串以插入适当的转义字符;该字符串会自动转义,因此不需要在ViewCarMembers页面内执行任何操作。您还需要创建一个函数来解析 CSV 列表并在目标页面上使用它。

更好的解决方案是传递指定汽车的名称而不是其所有车主的姓名,然后让目标页面从 ViewModel 中获取车主列表。

于 2012-04-19T13:17:04.443 回答