2010-03-23 10 views
5

मैं Silverlight में एक पृष्ठ जो MainPage.xaml से नेविगेट है, OpenPage.xaml कहा जाता है, मैं फिर वापस MainPage.xaml के लिए एक मूल्य पास करना चाहते हैं - इस OpenPage.xaml इस का उपयोग करते हुए कहा जाता है:सिल्वरलाइट में किसी अन्य पृष्ठ से MainPage.xaml को पास मूल्य?

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

mainpage से - इस mainpage के एक बच्चे के रूप RootVisual बदल दिया जाता है नहीं है - मैं इस कॉल कर सकते हैं:

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

mainpage पर लौटने के लिए - लेकिन मैं करने के लिए OpenPage.xaml से एक मूल्य के पारित करने के लिए की जरूरत है MainPage.xaml - मैं मेनपेज इंस्टेंस का उपयोग कैसे करूं - मेरे पास दस्तावेज़ नामक एक संपत्ति है, हालांकि जब मैं ऐसा करता हूं:

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

या इस:

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

क्योंकि मुझे लगता है कि यह MainPage.xaml को OpenPage.xaml कास्ट करने के लिए कोशिश कर रहा है मैं गलत डाली अपवाद - कैसे करने के लिए मैं NavigatedTo पृष्ठ मिलता है, मैं चाहता हूँ OpenPage.xaml से MainPage.xaml पर संपत्ति सेट करने के लिए।
मैं मेनपेज.एक्सएएमएल से दूसरे पेज से SavePage.xaml पर भी वैल्यू पास करना चाहता हूं - लेकिन यह एक ही समस्या है - मैं इसे कैसे हल करूं?

उत्तर

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 स्थानों स्ट्रिंग।

मेनपेज तब ऐसे क्वेरी स्ट्रिंग मान की उपस्थिति के लिए परीक्षण करता है, यदि वर्तमान में MessageService.Default.Retrieve पर कॉल करने के लिए इसका मान उपयोग करता है जो आइटम से सेवा को हटा देता है। ASP.NET QueryStrings की तरह, यह मेरे वर्तमान उदाहरण के लिए ठीक हो सकता है लेकिन यह वस्तुओं के साथ यह करने के लिए के रूप में इस पृष्ठों के बीच अधिक जटिल डेटा बातचीत के लिए उपयोगी हो सकता है possble है -

+0

यह एक दिलचस्प समाधान है। वर्तमान में मुझे इसे अलग-अलग भंडारण के लिए फ़ाइल नाम के लिए चाहिए, लेकिन बाद में इसे अन्य उपयोगों के लिए इसकी आवश्यकता है। धन्यवाद। – RoguePlanetoid

+0

एक अतिरिक्त कहां और कैसे क्वारीस्ट्रिंग मान को पढ़ने के लिए सबसे अच्छा तरीका है। – RoguePlanetoid

+0

@RoguePlanetoid: मैंने क्या सोचा है कि मैंने पहले ही दिखाया है, कहां? शायद OnNavigatedTo ओवरराइड में सबसे अच्छा होगा। – AnthonyWJones

0
Partial Public Class MainPage 
    Inherits UserControl 

    Public Sub New() 

     InitializeComponent() 

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

     ............... 
संबंधित मुद्दे