2016-11-28 86 views
0

我正在使用Xamarin Forms和Prism。我使用Prism INavigationService完成頁面之間的導航。我有一個Xamarin Forms ContentPage和許多具有自己View Model的子ViewView。當我點擊一個孩子ContentView時,我想用兒童ContentView的一些屬性導航到另一個ContentPage。我想知道是否有可能將父視圖模型INavigationService傳遞給子ViewView視圖模型?還是有其他的最佳做法可以用來滿足我的要求嗎?如何從父ContentPage ViewModel將INavigationService傳遞給子ViewView ViewModel?

回答

0

你需要做的是,一旦你註冊使用RegisterForNavigation <頁的頁面註冊您的prismApplcation頁面是useually你的App.xaml >,那麼你可以在頁面的構造就像注入INavigationService這

private INavigationService _navigationService; 
public MyPage(INavigationService navigationService) 
{ 
    _navigationService = navigationService 
} 

Alternativly你可以做同樣的事情(推薦)在頁面視圖模型,但你需要確保在頁面的XAML文件打開自動定位。

如果您要在內容頁面之間導航,則是這種情況。然而,在你的情況下,你有多視圖,每個視圖都有自己的視圖模型,雖然這是違反規則的,因爲視圖基本上可以從他們的頁面共享視圖模型,但是如果你堅持這樣做,我唯一的建議,無需查看代碼,就是使用與註冊頁面相同的容器爲每個視圖註冊視圖模型。使用註冊類型<>()爲此,你會發現Inavigationservice將被注入。 再一次,我認爲你最好改變你的代碼設計。

+0

嗨BraveHeart,感謝您的回覆。註冊僅適用於ContentPages,不適用於ContentViews。我的子對象是ContentView類型的。所以註冊不起作用。 –

0

目前唯一的解決方法是爲子視圖模型斷開自動佈線。我在我的內容頁面視圖模型中創建了所有子視圖模型作爲成員變量,並將它們綁定到XAML中的視圖。它現在正在工作。我不確定這是最佳做法。如果有人發現有更好的解決方案,請讓我知道。

相關問題