2011-06-23 58 views

回答

0

我實現了INavigationAware接口,並在OnNavigatedFrom()方法中的navigationContext.NavigationService.Region.Context中設置了複雜對象。現在在下一頁中,我再次實現了INavigationAware接口,現在我在OnNavigatedTo()中檢查相同的值以獲取值。

更新:我在另一個問題中發佈了帶有代碼的答案。這裏提到它的參考 -

首先獲得來自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; 
        ... 
       } 
    } 
} 

希望它可以幫助你!

0

「問你想要的東西」是統一的方式。您可以與任何其他統一對象共享註冊爲單例的對象。只需在viewmodels的構造函數中指定該共享對象的接口即可。

正如Dmitry Kushnier所提到的,您還可以通過EventAggregator將複雜類型作爲參數傳遞。

+0

我打算使用navigationContext.NavigationService.Region.Context在頁面之間設置一些數據模型。 – whihathac

+0

@whihathac:如果你只是想在視圖之間分享它,那麼這將起作用。如果您將控制器引入您的應用程序,您可能需要重新考慮:) –

+0

感謝您的反饋意見。我已經與MEF一起使用PRISM。介紹Unity的這種看起來像過度殺傷:) – whihathac