2016-05-13 64 views
2

我有一個使用Prism和Unity的Xarmarin形式應用程序,並且導航到選項卡式頁面時遇到問題。棱鏡Xamarin形式選項卡式頁導航

我使用以下版本:Prism.Forms 6.1.0-pre5 Prism.Unity.Forms V6.2.0-pre5 Xamarin.Forms v2.3.0.38-PRE2

我的選項卡頁面看起來像這樣

<?xml version="1.0" encoding="utf-8" ?> 
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms" 
     xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
     xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms" 
     prism:ViewModelLocator.AutowireViewModel="True" 
     xmlns:local="clr-namespace:ServiceOrdersMobileApps.Views;assembly=ServiceOrdersMobileApps" 
     x:Class="ServiceOrdersMobileApps.Views.ServiceOrderTabs"> 
<NavigationPage Title="Summary"> 
    <x:Arguments> 
    <local:ServiceOrderSummary /> 
    </x:Arguments> 
</NavigationPage> 
<NavigationPage Title="Complete"> 
    <x:Arguments> 
    <local:ServiceOrderDetails /> 
    </x:Arguments> 
    </NavigationPage> 
</TabbedPage> 

我試圖導航到所選擇的服務訂單詳細信息頁面的標籤頁,但根據本blog post,當我瀏覽。它導航過去標籤頁到一個單獨的服務訂單詳細信息頁面

var p = new NavigationParameters(); 
p.Add("serviceorder", context); 
await _navigationService.NavigateAsync($"{nameof(ServiceOrderTabs)}/{nameof(ServiceOrderDetails)}",p); 

回答

2

你有包裹在一個通用NavigationPage是棱鏡不知道的頁面。您需要創建派生的NavigationPage並註冊它以進行導航。然後用它來包裝你的COntentPages。然後,您可以嘗試像「ServiceOrdersTabs/MyNavigationPage/ServiceOrdersDetails」一樣進行導航。

但即使這樣,現在我想起它可能無法正常工作,因爲您將擁有同一個NavigationPage的多個實例,Prism將使用它找到並使用它的第一個實例。

對於解決方法,您必須爲每個選項卡(ServiceOrderSummaryNavPage,ServiceOrdersDetailsNavPage等)創建不同的NavigationPage,以確保每個選項卡都是唯一的。

順便說一句,從哪裏駕駛?

+0

如果我創建ServiceOrdersDetailsNavPage多數民衆贊成實現NavigationPage,我如何創建ServiceOrdersTabs兒童與我的ServiceOrdersDetailsNavPage因爲我不能調用我的基礎構造函數多數民衆贊成在XAML需要一個頁面。謝謝 –

+0

只需像往常一樣將頁面添加到XAML中的TabbedPage。 –