2017-08-07 79 views
1

下面是我的代碼不起作用,你可以發現什麼是錯的?不能得到這個MasterDetail與棱鏡和列表視圖

我試圖將它轉換爲棱鏡 https://github.com/xamarin/xamarin-forms-samples/tree/master/Navigation/MasterDetailPage

我不斷收到

「System.InvalidOperationException:未在Android的全球支持 PushAsync,請使用NavigationPage。」

我使用的是navigationpage(我覺得我做的)

可能有人看代碼。下面是所有的代碼,並告訴我,我到底做錯了什麼?

非常感謝!

app.cs

public partial class App : PrismApplication 
     { 
      public App(IPlatformInitializer initializer = null) : base(initializer) { } 

      protected override void OnInitialized() 
      { 
        InitializeComponent(); 

        NavigationService.NavigateAsync("MainPage/Navigation/ContactsPage");       
      } 

      protected override void RegisterTypes() 
      { 
       //Container.RegisterTypeForNavigation<NavigationPage>("Navigation"); 
       Container.RegisterTypeForNavigation<MainNavigationPage>("Navigation"); 

       Container.RegisterTypeForNavigation<MainPage,MainPageViewModel>(); 

       Container.RegisterTypeForNavigation<ContactsPage,ContactsPageViewModel>(); 
       Container.RegisterTypeForNavigation<MasterPage,MasterPageViewModel>(); 
       Container.RegisterTypeForNavigation<ReminderPage,ReminderPageViewModel>(); 
       Container.RegisterTypeForNavigation<TodoListPage,TodoListPageViewModel>(); 

      } 
     } 

MainNavigationPage.Xaml

<?xml version="1.0" encoding="utf-8" ?> 
    <NavigationPage 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" 
        x:Class="MasterDetailReferenceApp.Views.MainNavigationPage"> 

    </NavigationPage> 

MainPage.xaml中

<?xml version="1.0" encoding="utf-8" ?> 
     <MasterDetailPage 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" 
        xmlns:views="clr-namespace:MasterDetailReferenceApp.Views;assembly=MasterDetailReferenceApp" 
        prism:ViewModelLocator.AutowireViewModel="True" 
        x:Class="MasterDetailReferenceApp.Views.MainPage" 
        Title="MainPage"> 
      <MasterDetailPage.Master> 
    <views:MasterPage x:Name="masterPage" /> 
</MasterDetailPage.Master> 
<MasterDetailPage.Detail> 
    <NavigationPage> 
     <x:Arguments> 
      <views:ContactsPage /> 
     </x:Arguments> 
    </NavigationPage> 
</MasterDetailPage.Detail> 

MainPage.cs

public partial class MainPage : MasterDetailPage,IMasterDetailPageOptions 
     { 
      public MainPage() 
      { 
       InitializeComponent(); 
      } 

      public bool IsPresentedAfterNavigation => Device.Idiom != TargetIdiom.Phone; 
     } 

<?xml version="1.0" encoding="utf-8" ?> 
    <ContentPage 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" 
       x:Class="MasterDetailReferenceApp.Views.MasterPage"    
       Icon="hamburger.png" 
       Title="Personal Organiser"> 
     <ContentPage.Content> 
      <StackLayout VerticalOptions="FillAndExpand"> 
       <ListView x:Name="listView" 
          RowHeight="60" 
          SeparatorVisibility="None" 
          BackgroundColor="White" 
          HasUnevenRows="true" 
          ItemSelected="OnMenuItemSelected"> 
          > 
        <ListView.ItemTemplate> 
         <DataTemplate> 
          <ImageCell Text="{Binding Title}" ImageSource="{Binding IconSource}" /> 
         </DataTemplate> 
        </ListView.ItemTemplate> 
       </ListView> 
      </StackLayout> 
     </ContentPage.Content> 
    </ContentPage> 

MasterPage.cs

public partial class MasterPage : ContentPage 
    { 
     public ListView ListView => listView; 

     public MasterPage() 
     { 
      InitializeComponent(); 

      var masterPageItems = new List<MasterPageItem>(); 
      masterPageItems.Add(new MasterPageItem 
      { 
       Title = "Contacts", 
       //Uri = "ContactsPage", 
       Uri = "Navigation/ContactsPage", 
       IconSource = "contacts.png", 
       TargetType = typeof(ContactsPage) 
      }); 
      masterPageItems.Add(new MasterPageItem 
      { 
       Title = "TodoList", 
       Uri = "Navigation/TodoListPage", 
       //Uri = "TodoListPage", 
       IconSource = "todo.png", 
       TargetType = typeof(TodoListPage) 
      }); 
      masterPageItems.Add(new MasterPageItem 
      { 
       Title = "Reminders", 
       Uri = "Navigation/RemindersPage", 
       IconSource = "reminders.png", 
       TargetType = typeof(ReminderPage) 
      }); 


      listView.ItemsSource = masterPageItems; 
     } 

     private void OnMenuItemSelected(object sender, SelectedItemChangedEventArgs e) 
     { 
      var item = (MasterPageItem)e.SelectedItem; 

      ((MasterPageViewModel)BindingContext).NavigateCommand.Execute(item.Uri); 

     } 
    } 

MasterPageItem

public class MasterPageItem 
      { 
       public string Title { get; set; } 
       public string Uri { get; set; } 
       public string IconSource { get; set; } 
      } 
+0

也異常發生時做

await NavigationService.NavigateAsync(nameof(OtherNonMasterDetailPage)); 

?啓動應用程序後?或者當點擊左側菜單? 更改App.cs NavigationService.NavigateAsync(「MainPage/Navigation/ContactsPage」);到「MainPage/MainNavigationPage/ContactsPage」會有幫助嗎? – lowleetak

+0

感謝您發現,但仍然相同的錯誤 – developer9969

回答

0

你需要設置一些NavigationPage作爲詳細的MasterDetailPage。像這樣:

<MasterDetailPage.Detail> 
     <NavigationPage BarTextColor="White"> 
      <x:Arguments> 
       <local:StatisticsPage /> 
      </x:Arguments> 
     </NavigationPage> 
    </MasterDetailPage.Detail> 

在這個例子中導航頁面的第一頁將是StatisticsPage。
然後,從StatisticsPageViewModel你可以做

await _navigationService.NavigateAsync(new Uri(navParam, UriKind.Relative), useModalNavigation: isModal); 

其中navParam是nameof(SettingsPage)。這將切換NavigationPage內容到SettingsPage。

如果你要離開MasterDetailPage消失,那麼從您MasterDetailPageViewModel(而不是從NavigationPage內容的視圖模型)

+0

感謝您的答覆。它驅使我mad.see編輯的問題我修改了masterDetail頁面,但我仍然遇到同樣的錯誤,當我從菜單中選擇一個頁面。這是我唯一的變化 – developer9969

+0

'保護覆蓋無效OnInitialized() { InitializeComponent(); NavigationService.NavigateAsync(nameof(MainPage)); }' –

+0

同樣的錯誤..很高興通過電子郵件發送解決方案或上傳到某處 – developer9969