2011-07-11 32 views
1

平臺:如何將數據通過Frame.Navigate在Silverlight發送到導航到第4頁

的Silverlight 4/.NET 4

背景:

我有一個頁面它由兩部分組成。左側是樹形視圖,右側是內容區域。當我選擇一個樹項目時,應根據樹項目的類型將相應的UserControl頁面加載到頁面的右側部分。

我正在使用XAML中定義的Frame對象。 當用戶選擇樹形視圖項目時,我解析項目的類型,然後導航到爲該類型定義的頁面。

但是,Frame.Navigate是一個異步方法,所以如果我在導航之後嘗試獲取框架的內容,那麼框架還沒有導航,所以我沒有任何東西或最後加載的頁面。

contentFrame.Navigate(new Uri("/PageA.xaml", UriKind.Relative)); 
PageA page = contentFrame.Content as PageA; 
// page here is either null or a previously opened page 

問題:

我需要發送一些數據(存儲在樹視圖項的標籤)的頁面被導航到的唯一Frame.Navigate過載是異步的(沒有回調)。 如何將一些數據發送到導航頁面?有沒有其他技術來完成我所需要的?

回答

0

您可以使用Silverlight提供的NavigationService。它具有查詢字符串支持,您可以使用它來構建RESTful URI。我假設您需要將一些基於上下文的數據傳遞到着陸頁。以下鏈接可以幫助你

http://www.silverlightshow.net/items/The-Silverlight-3-Navigation-Framework.aspx

http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2009/04/02/silverlight-3-quick-tip-6-navigation-framework-and-uri-routing.aspx

http://www.wintellect.com/CS/blogs/jprosise/archive/2009/04/07/silverlight-3-s-new-navigation-framework.aspx

雖然鏈接說Silverlight 3中,這些功能在Silverlight 4,以及支持。

+0

感謝您的聯繫。但是,我不想傳遞一些原始數據,我需要傳遞一個實體對象。我想有一種方法可以將對象序列化爲一個字符串,但我認爲這不是一個好主意。如果導航服務不支持這種數據傳輸,我想我會使用一個靜態對象。 –

+0

你是否在爲你的開發使用任何框架?如果您查看Prism或MVVMLight等選項,這些框架提供了不同視圖模型之間通信的分離方式。 Prism使用EventAgreegator而MVVMLight使用Messenger。也許你可以看看那些幫助。實際上,在我之前工作過的一個WOF項目中,我們只使用了Prism中的EventAgreegator。 –

0

你一定想用一些Nilesh建議的M-V-VM模式。

我想你也可以有一個靜態類,它包含對象的靜態引用。 當您的框架完成其事件(例如NavigatedTo)時,您只需在此處引用靜態對象即可。

相關問題