2010-03-23 8 views
5

Mam stronę w Silverlight, który żeglował z MainPage.xaml, zwany OpenPage.xaml, ja potem chce przekazać wartość z powrotem do MainPage.xaml - to OpenPage.xaml jest wywoływana przy użyciu to:Przekaż wartość z innej strony do MainPage.xaml w Silverlight podczas korzystania z nawigacji?

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

z tytułowa - to nie jest dzieckiem mainpage jak RootVisual otrzymuje - mogę nazwać:

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

aby powrócić do tytułowa - jednak trzeba przekazać wartość z OpenPage.xaml do MainPage.xaml - jak uzyskać dostęp do instancji MainPage - Mam właściwość o nazwie Document, ale gdy to zrobię:

 MainPage m = (MainPage)Application.Current.RootVisual; 
     m.Document = "Hello World"; 

Albo to:

((MainPage)root).Document = "Hello World"; 

otrzymuję wyjątek niepoprawnego rzutowania, ponieważ myślę, że stara się rzucić OpenPage.xaml do MainPage.xaml - Jak dostanę NavigatedTo stronę, chcę aby ustawić właściwość na MainPage.xaml z OpenPage.xaml.
Chcę również przekazać wartości z MainPage.xaml na inną stronę SavePage.xaml - ale ma to ten sam problem - jak rozwiązać ten problem?

Odpowiedz

6

Użyj ciąg znaków zapytania: -

NavigationService.Navigate(new Uri("/MainPage.xaml?value=Hello%20World", UriKind.Relative); 

MainPage może wtedy nabyć tę wartość za pomocą: -

string value = this.NavigationContext.QueryString["value"]; 

Edycja:

W odpowiedzi na komentarz re przechodząc inne rodzaje .

Po wykonaniu powyższych czynności można użyć innych wzorców usług do przekazywania innych typów. Dla przykładu rozważmy MessageService który implementuje: -

interface IMessageService 
{ 
    Guid Store(object value) 
    object Retrieve(Guid key) 
} 

Można by następnie wdrożyć ten interfejs i narażać realizację jako pojedyncza powiedzieć: -

public class MessageService : IMessageService 
{ 
    public static IMessageService Default { // singleton stuff here } 
} 

Twój OpenPage wzywa MessageService.Default.Store i umieszcza wynikowy Guid w zapytaniu strunowy.

Strona główna testuje następnie obecność takiej wartości ciągu zapytania, jeśli obecna używa jej wartości, aby wywołać MessageService.Default.Retrieve, która usuwa przedmiot z usługi.

+0

Jest to ciekawe rozwiązanie - jak ASP.NET QueryStrings, może to być dobre dla mojego obecnego przykład, ale jest to possble zrobić z przedmiotami, ponieważ może to być przydatne dla bardziej złożonych interakcji danych pomiędzy stronami. Obecnie potrzebuję go dla nazwy pliku dla odizolowanego miejsca, ale potrzebuję go do innych zastosowań później. Dzięki. – RoguePlanetoid

+0

Jako dodatkowe miejsce i sposób, w jaki najlepiej odczytać wartość QueryString, która została przekazana. – RoguePlanetoid

+0

@RoguePlanetoid: Jak to, co myślałem, już pokazałem, gdzie? Prawdopodobnie w OverNide OnNavigatedTo byłoby najlepsze. – AnthonyWJones

0
Partial Public Class MainPage 
    Inherits UserControl 

    Public Sub New() 

     InitializeComponent() 

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

     ............... 
Powiązane problemy