使用Navigation时,将另一个页面的值传递给Silverlight中的MainPage.xaml?

时间:2010-03-23 13:39:20

标签: c# silverlight xaml navigation

我在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 - 但这有同样的问题 - 我该如何解决这个问题?

2 个答案:

答案 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)

        ...............