我在Silverlight中有一个页面,它从MainPage.xaml导航,名为OpenPage.xaml,然后我想将一个值传递回MainPage.xaml - 这个OpenPage.xaml用这个调用:
NavigationService.Navigate(new Uri("/OpenPage.xaml", UriKind.Relative));
从主页 - 这不是MainPage的子节点,因为RootVisual被替换 - 我可以这样称呼:
NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
要返回MainPage - 但是我需要将一个值从OpenPage.xaml传递给MainPage.xaml - 如何访问MainPage实例 - 我有一个名为Document的属性但是当我这样做时:
MainPage m = (MainPage)Application.Current.RootVisual;
m.Document = "Hello World";
或者这个:
((MainPage)root).Document = "Hello World";
我得到了一个无效的强制转换异常,因为我认为它试图将OpenPage.xaml强制转换为MainPage.xaml - 如何获取NavigatedTo页面,我想在OpenPage.xaml上设置MainPage.xaml上的属性。登记/> 我还想将值从MainPage.xaml传递到另一个页面SavePage.xaml - 但这有同样的问题 - 我该如何解决这个问题?
答案 0 :(得分:6)
使用查询字符串值: -
NavigationService.Navigate(new Uri("/MainPage.xaml?value=Hello%20World", UriKind.Relative);
然后 MainPage
可以使用以下方法获取此值: -
string value = this.NavigationContext.QueryString["value"];
修改强>:
回应评论重新传递其他类型。
完成上述操作后,您可以使用其他服务模式传递其他类型。例如,考虑一个实现的MessageService: -
interface IMessageService
{
Guid Store(object value)
object Retrieve(Guid key)
}
然后,您将实现此接口并将实现公开为单例说: -
public class MessageService : IMessageService
{
public static IMessageService Default { // singleton stuff here }
}
您的OpenPage调用MessageService.Default.Store
并将生成的Guid放入查询字符串中。
MainPage然后测试是否存在这样的查询字符串值(如果存在)使用其值来调用MessageService.Default.Retrieve
,从服务中删除该项。
答案 1 :(得分:0)
Partial Public Class MainPage
Inherits UserControl
Public Sub New()
InitializeComponent()
ContentFrame.Source = New Uri("/About", UriKind.Relative)
...............