2011-04-11 27 views
7

我正在研究一個PRISM應用程序,我們深入瞭解數據(以獲取更多詳細信息)。 在我的實現中,我有一個嵌套的MVVM,當我向下導航樹時,我想將模型傳遞給我新創建的視圖。如何在導航到PRISM中的新視圖時傳遞對象4

據我所知,目前PRISM允許傳遞字符串,但不允許傳遞對象。我想知道克服這個問題的方法是什麼。

回答

7

我通常使用一個服務,我註冊的對象我想通過一個GUID傳遞。這些被存儲在散列表中,當在棱鏡中導航時,我將guid作爲參數傳遞,然後可以用它來檢索對象。

希望這對你有意義!

+2

這很有道理。這是一個恥辱PRISM不支持在導航過程中傳遞對象,它會讓生活變得更容易。 – Vitalij 2011-04-11 21:37:43

3

我會使用OnNavigatedTo和OnNavigatedFrom方法使用NavigationContext傳遞對象。

首先獲得來自INavigationAware接口視圖模型 -

public class MyViewModel : INavigationAware 
{ ... 

然後就可以實現OnNavigatedFrom和設置要通過導航上下文如下對象 -

void INavigationAware.OnNavigatedFrom(NavigationContext navigationContext) 
{ 
    SharedData data = new SharedData(); 
    ... 
    navigationContext.NavigationService.Region.Context = data; 
} 

,當你想接收數據,在第二視圖模型中添加以下一段代碼 -

void INavigationAware.OnNavigatedTo(NavigationContext navigationContext) 
{ 
    if (navigationContext.NavigationService.Region.Context != null) 
    { 
       if (navigationContext.NavigationService.Region.Context is SharedData) 
       { 
        SharedData data = (SharedData)navigationContext.NavigationService.Region.Context; 
        ... 
       } 
    } 
} 

ps。標記爲答案,如果這有幫助。

+1

OnNavigatedFrom僅在您導航到相同區域中的視圖時纔有效。如果你在另一個區域,你可以這樣做:_regionManager.Regions [RegionNames.MainRegion] .Context = new List {new DataItem()};然後調用RequestNavigate – 2014-01-23 22:21:16

1

PRISM支持提供參數:

var para = new NavigationParameters { { "SearchResult", result } }; 
_regionManager.RequestNavigate(ShellRegions.DockedRight, typeof(UI.SearchResultView).FullName, OnNavigationCompleted, para); 

和執行你的視圖,視圖模型或兩個INavigationAware接口。

你也可以在這裏找到細節:https://msdn.microsoft.com/en-us/library/gg430861%28v=pandp.40%29.aspx

相關問題