如何将数据发送到通过Silverlight 4中的Frame.Navigate导航到的页面

时间:2011-07-11 08:03:33

标签: c# silverlight asynchronous navigation frame

平台:

Silverlight 4 / .NET 4

背景

我有一个由两部分组成的页面。左侧部分是树视图,右侧是内容区域。当我选择一个树项时,应该在页面的右侧加载一个适当的UserControl页面,具体取决于树项的类型。

我正在使用在XAML中定义的Frame对象。 当用户选择树视图项时,我解析项的类型,然后导航到为该类型定义的页面。

但是,Frame.Navigate是一个异步方法,所以如果我尝试在Navigate之后获取帧的内容,那么帧还没有导航,所以我得到的东西或最后一个加载的页面。

contentFrame.Navigate(new Uri("/PageA.xaml", UriKind.Relative));
PageA page = contentFrame.Content as PageA;
// page here is either null or a previously opened page

问题:

我需要将一些数据(存储在treeview项目的标签中)发送到导航到的页面,并且唯一的Frame.Navigate重载是异步的(没有回调)。 如何将一些数据发送到导航页面?有没有其他技术可以完成我需要的工作?

2 个答案:

答案 0 :(得分:0)

您可以使用Silverlight提供的NavigationService。它具有查询字符串支持,您可以使用它来构建RESTful URI。我假设您需要将一些基于上下文的数据传递到登录页面。以下链接可能会对您有所帮助

http://www.silverlightshow.net/items/The-Silverlight-3-Navigation-Framework.aspx

http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2009/04/02/silverlight-3-quick-tip-6-navigation-framework-and-uri-routing.aspx

http://www.wintellect.com/CS/blogs/jprosise/archive/2009/04/07/silverlight-3-s-new-navigation-framework.aspx

虽然链接显示Silverlight 3,但Silverlight 4也支持这些功能。

答案 1 :(得分:0)

你肯定想使用Nilesh建议的一些M-V-VM模式。

我猜你也可以有一个静态类来保存对象的静态引用。 您可以在帧完成事件时简单地引用静态对象(例如NavigatedTo)。