Передать значение с другой страницы в MainPage.xaml в Silverlight при использовании навигации? - PullRequest
5 голосов
/ 23 марта 2010

У меня есть страница в Silverlight, которая перемещается из MainPage.xaml, называется OpenPage.xaml, затем я хочу передать значение обратно в MainPage.xaml - этот OpenPage.xaml вызывается с помощью этого:

NavigationService.Navigate(new Uri("/OpenPage.xaml", UriKind.Relative));

С главной страницы - это не дочерний элемент главной страницы, так как 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, я хочу установить свойство MainPage.xaml из OpenPage.xaml.
Я также хочу передать значения из MainPage.xaml на другую страницу SavePage.xaml - но это та же проблема - как мне решить эту проблему?

Ответы [ 2 ]

6 голосов
/ 23 марта 2010

Используйте значение строки запроса: -

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, который удаляет элемент из службы.

0 голосов
/ 07 мая 2012
Partial Public Class MainPage
    Inherits UserControl

    Public Sub New()

        InitializeComponent()

        ContentFrame.Source = New Uri("/About", UriKind.Relative)

        ...............
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...